@ninebone/util 1.0.4 โ†’ 1.0.5

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/dist/nine-util.js CHANGED
@@ -262,21 +262,23 @@ __publicField(_Fetch, "postMultipart", async (url, rows = [], options = {}) => {
262
262
  let totalCount = 0;
263
263
  let lastResponse = null;
264
264
  return (async () => {
265
+ let globalFileIndex = 0;
265
266
  for (let i = 0; i < dataRows.length; i += chunkSize) {
266
267
  const formData = new FormData();
267
268
  const chunk = dataRows.slice(i, i + chunkSize);
268
269
  const rowDataList = [];
269
- chunk.forEach((row) => {
270
+ chunk.forEach((row, rowIndex) => {
270
271
  const { [fileKey]: fileData, ...rest } = row;
271
272
  rowDataList.push(rest);
272
273
  const files = Array.isArray(fileData) ? fileData : [fileData];
274
+ const fileIndices = [];
273
275
  files.forEach((fileObj) => {
274
276
  if (fileObj instanceof File) {
275
277
  formData.append(filePartName, fileObj);
276
- } else {
277
- formData.append(filePartName, new File([], "empty_file"));
278
+ fileIndices.push(globalFileIndex++);
278
279
  }
279
280
  });
281
+ rowDataList.push({ ...rest, fileIndices });
280
282
  });
281
283
  const jsonBlob = new Blob(
282
284
  [JSON.stringify(Array.isArray(rows) ? rowDataList : rowDataList[0])],
@@ -1235,7 +1237,7 @@ class UxSplitter extends HTMLElement {
1235
1237
  const htmlTmpl = document.createElement("template");
1236
1238
  htmlTmpl.innerHTML = `
1237
1239
  <style>
1238
- @import "https://cdn.jsdelivr.net/npm/@ninebone/util@${"1.0.4"}/dist/css/nine-util.css";
1240
+ @import "https://cdn.jsdelivr.net/npm/@ninebone/util@${"1.0.5"}/dist/css/nine-util.css";
1239
1241
  ${customImport}
1240
1242
  </style>
1241
1243
  ${gripTmpl}
@@ -1 +1 @@
1
- {"version":3,"file":"nine-util.js","sources":["../src/core/Config.js","../src/core/Trace.js","../src/core/TaskDebouncer.js","../src/external/NoPeer.js","../src/ux/Loading.js","../src/net/Fetch.js","../src/ux/dialog/style.dialog.js","../src/ux/dialog/nineDialog.js","../src/ux/dialog/nineConfirm.js","../src/ux/dialog/ninePrompt.js","../src/utils/promise.js","../src/ux/dialog/NineUxUtil.js","../src/ux/UxSplitter.js","../node_modules/dayjs/dayjs.min.js","../src/utils/NinePopup.js","../src/utils/NineUtil.js","../src/index.js"],"sourcesContent":["const listeners = new Set();\r\n\r\n// ๐Ÿ’ก [ํ•ต์‹ฌ] ์ „์—ญ ์ €์žฅ์†Œ๋ฅผ ๋‹จ์ผํ™”ํ•ฉ๋‹ˆ๋‹ค.\r\n// window์— ์ด๋ฏธ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์“ฐ๊ณ , ์—†์œผ๋ฉด ์ดˆ๊ธฐ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.\r\nconst _initialConfig = {\r\n\tux: { nativeOverride: false, theme: 'light' },\r\n\tboard: { readOnly: false },\r\n\tcssPath: \"\",\r\n\tdebug: false\r\n};\r\n\r\nif (typeof window !== 'undefined' && !window.__NINE_GLOBAL_CONFIG__) {\r\n\twindow.__NINE_GLOBAL_CONFIG__ = _initialConfig;\r\n}\r\n\r\n// ์ด์ œ ๋ชจ๋“  ๋ชจ๋“ˆ์˜ _config๋Š” ๋™์ผํ•œ window ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.\r\nconst _config = typeof window !== 'undefined' ? window.__NINE_GLOBAL_CONFIG__ : _initialConfig;\r\n\r\nexport const subscribeConfig = (fn) => {\r\n\tlisteners.add(fn);\r\n\tfn('all', _config);\r\n\treturn () => listeners.delete(fn);\r\n};\r\n\r\n// Proxy ์—ญ์‹œ ์ „์—ญ ์ €์žฅ์†Œ์ธ _config๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.\r\nexport const config = new Proxy(_config, {\r\n\tset(target, prop, value) {\r\n\t\ttarget[prop] = value;\r\n\t\tlisteners.forEach(fn => fn(prop, target));\r\n\t\treturn true;\r\n\t},\r\n\tget(target, prop) {\r\n\t\treturn target[prop];\r\n\t}\r\n});\r\n\r\nexport const nine = {\r\n\tconfig: config,\r\n\r\n\t// Getter์—์„œ window.nine๊นŒ์ง€ ํ™•์ธํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.\r\n\t// ์ด๋ฏธ config ์ž์ฒด๊ฐ€ ์ „์—ญ ์ €์žฅ์†Œ(__NINE_GLOBAL_CONFIG__)๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.\r\n\tget cssPath() {\r\n\t\treturn this.config.cssPath || \"\";\r\n\t},\r\n\r\n\tsetup(options = {}) {\r\n\t\tObject.entries(options).forEach(([key, value]) => {\r\n\t\t\t// ๊นŠ์€ ๋ณ‘ํ•ฉ ์ง€์›\r\n\t\t\tif (typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n\t\t\t\tthis.config[key] = { ...this.config[key], ...value };\r\n\t\t\t} else {\r\n\t\t\t\tthis.config[key] = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ window.nine์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅ\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\twindow.nine = window.nine || this;\r\n\t\t}\r\n\t}\r\n};","//import { nine } from '@nine-lab/nine-util';\r\n\r\nexport class Trace {\r\n\t#name;\r\n\t#color;\r\n\r\n\tconstructor(name = null, color = \"green\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\tinit(name, color = \"green\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊ทธ ํ™œ์„ฑํ™” ๋ฐ ํ•„ํ„ฐ ํƒ€๊ฒŸ ์—ฌ๋ถ€ ์ฒดํฌ ํ—ฌํผ\r\n\t */\r\n\t#isTraceEnabled() {\r\n\t\t// 1. ์ตœ์ƒ๋‹จ main.jsx์—์„œ nine.setup() ์„ธํŒ…์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ\r\n\t\tif (nine && nine.config && nine.config.debug) {\r\n\t\t\tconst debugConfig = nine.config.debug;\r\n\r\n\t\t\t// ๐Ÿšจ ๋””๋ฒ„๊ทธ ๋งˆ์Šคํ„ฐ ์Šค์œ„์น˜๊ฐ€ ๊บผ์ ธ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ์ถœ๋ ฅ ์•ˆ ํ•จ\r\n\t\t\tif (debugConfig.enable === false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// ๐ŸŽฏ [ํ•„ํ„ฐ ์ฒดํฌ ์ถ”๊ฐ€] ๋””๋ฒ„๊ทธ๊ฐ€ ์ผœ์ ธ์žˆ๊ณ , ํ•„ํ„ฐ(filter) ๋ฐฐ์—ด ๋ช…๋‹จ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ\r\n\t\t\tif (debugConfig.enable === true && Array.isArray(debugConfig.filter)) {\r\n\t\t\t\t// ์ด๋ฆ„์ด ์ง€์ • ์•ˆ ๋œ ์ˆœ์ • trace.log๋Š” ํ†ต๊ณผ, ์ด๋ฆ„์ด ์žˆ๋‹ค๋ฉด ํ•„ํ„ฐ ๋ช…๋‹จ์— ์žˆ์–ด์•ผ๋งŒ ํ†ต๊ณผ!\r\n\t\t\t\tif (this.#name) {\r\n\t\t\t\t\treturn debugConfig.filter.includes(this.#name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn debugConfig.enable;\r\n\t\t}\r\n\r\n\t\t// 2. [Fallback] ๋งŒ์•ฝ nine ์…‹์—… ์ „์— ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ์„ธํŒ…์ด ์—†๋‹ค๋ฉด ๊ธฐ์กด ๋กœ์ปฌ ์ฃผ์†Œ ์—ฌ๋ถ€๋กœ ํŒ๋‹จ\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\treturn window.location.hostname === 'localhost' ||\r\n\t\t\t\twindow.location.hostname === '127.0.0.1' ||\r\n\t\t\t\twindow.location.hostname.startsWith('192.168.');\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// ๐Ÿ”ด ํ•ต์‹ฌ: ์†Œ์Šค ์œ„์น˜ ์œ ์ง€๋ฅผ ์œ„ํ•œ Getter ๋กœ์ง\r\n\tget log() {\r\n\t\tif (!this.#isTraceEnabled()) return () => {};\r\n\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\t\treturn (this.#name)\r\n\t\t\t? console.log.bind(console, `%c[${this.#name}]`, style)\r\n\t\t\t: console.log.bind(console);\r\n\t}\r\n\r\n\tget warn() {\r\n\t\tif (!this.#isTraceEnabled()) return () => {};\r\n\t\treturn (this.#name)\r\n\t\t\t? console.warn.bind(console, `%c[${this.#name}]`, \"color: cyan; font-weight: bold;\")\r\n\t\t\t: console.warn.bind(console);\r\n\t}\r\n\r\n\tget error() {\r\n\t\t// ์‹œ์Šคํ…œ ์น˜๋ช…์  ์žฅ์•  ์—๋Ÿฌ๋Š” ๋””๋ฒ„๊ทธ ๋ชจ๋“œ/ํ•„ํ„ฐ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์‹ค์ œ ์žฅ์•  ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.\r\n\t\treturn (this.#name)\r\n\t\t\t? console.error.bind(console, `%c[${this.#name}]`, \"color: red; font-weight: bold;\")\r\n\t\t\t: console.error.bind(console);\r\n\t}\r\n}\r\n\r\nexport const trace = new Trace();\r\nif (typeof window !== 'undefined') window.trace = trace;","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => this.#flush(), this.#delay);\r\n\t}\r\n\r\n\texecWithKey(key, func, ...args) {\r\n\t\t// 1. ๊ฐ™์€ ํ‚ค(์˜ˆ: 'resize')๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ด์ „ ํ์—์„œ ํ•ด๋‹น ํ‚ค ์‚ญ์ œ (์ค‘๋ณต ์ œ๊ฑฐ)\r\n\t\tthis.#queue = this.#queue.filter(task => task.key !== key);\r\n\r\n\t\t// 2. ์ƒˆ๋กœ์šด ํƒœ์Šคํฌ ์ถ”๊ฐ€\r\n\t\tthis.#queue.push({ key, func, args });\r\n\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\t\tthis.#timer = setTimeout(() => this.#flush(), this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}","import { trace as traceOrigin } from '../core/Trace.js';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-util\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class Loading {\n\tstatic show() {\n\t\tlet overlay = document.getElementById(\"global-loading-overlay\");\n\t\tif (!overlay) {\n\t\t\toverlay = document.createElement(\"div\");\n\t\t\toverlay.id = \"global-loading-overlay\";\n\t\t\toverlay.style.cssText = `\n position: fixed; inset: 0; z-index: 9999;\n background: rgba(0, 0, 0, 0.4); display: flex; \n justify-content: center; align-items: center;\n backdrop-filter: blur(2px);\n `;\n\t\t\toverlay.innerHTML = `<div class=\"loading-spinner\"></div>`;\n\t\t\tdocument.body.appendChild(overlay);\n\n\t\t\tif (!document.getElementById(\"nine-util-style\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"nine-util-style\";\n\t\t\t\tstyle.innerHTML = `\n .loading-spinner {\n width: 48px; height: 48px;\n border: 5px solid rgba(255, 255, 255, 0.3);\n border-top-color: white; border-radius: 50%;\n animation: nine-spin 1s linear infinite;\n }\n @keyframes nine-spin { to { transform: rotate(360deg); } }\n `;\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\t\t}\n\t\toverlay.style.display = \"flex\";\n\t}\n\n\tstatic hide() {\n\t\tconst overlay = document.getElementById(\"global-loading-overlay\");\n\t\tif (overlay) overlay.style.display = \"none\";\n\t}\n}","import { trace } from \"@nopeer\";\nimport { Loading } from \"../ux/Loading.js\";\n\nexport class Fetch {\n\tstatic BASE_URL = window.__API_BASE_URL__ || \"\";\n\n\tstatic #request = (method, url, data = {}, showLoading = true) => {\n\t\tconst finalUrl = url.startsWith('http') ? url : `${this.BASE_URL}${url}`;\n\n\t\tif (showLoading) {\n\t\t\tLoading.show();\n\t\t}\n\n\t\t// 1. ๊ธฐ๋ณธ ํ—ค๋” ์„ค์ •\n\t\tconst headers = {};\n\n\t\t// ๐Ÿ”ด ํ•ต์‹ฌ: ๋ฐ์ดํ„ฐ๊ฐ€ FormData๊ฐ€ ์•„๋‹ ๋•Œ๋งŒ JSON ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.\n\t\tif (!(data instanceof FormData)) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tconst options = {\n\t\t\tmethod,\n\t\t\theaders\n\t\t};\n\n\t\tlet targetUrl = finalUrl;\n\t\tif (method === \"GET\") {\n\t\t\ttargetUrl += `?${new URLSearchParams(data)}`;\n\t\t} else {\n\t\t\t// ๐Ÿ”ด ํ•ต์‹ฌ: FormData๋Š” ๊ทธ๋Œ€๋กœ body์— ๋„ฃ๊ณ , ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” JSON.stringify ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n\t\t\toptions.body = data instanceof FormData ? data : JSON.stringify(data);\n\t\t}\n\n\t\treturn fetch(targetUrl, options)\n\t\t\t.then(async res => {\n\t\t\t\tif (!res.ok) {\n\t\t\t\t\tconst text = await res.text();\n\t\t\t\t\tthrow new Error(`API ์˜ค๋ฅ˜ (${res.status}): ${text}`);\n\t\t\t\t}\n\t\t\t\treturn res.json();\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\ttrace.error(`[IdeFetch.${method.toLowerCase()}] ${finalUrl} ์‹คํŒจ:`, err);\n\t\t\t\tthrow err;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (showLoading) {\n\t\t\t\t\tLoading.hide();\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\t// ๊ธฐ์กด post/get ๋ฉ”์„œ๋“œ๋„ ์ธ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ๋„๋ก ์ˆ˜์ •\n\tstatic get = (url, data = {}, showLoading = true) => this.#request(\"GET\", url, data, showLoading);\n\tstatic post = (url, data = {}, showLoading = true) => this.#request(\"POST\", url, data, showLoading);\n\n\t/**\n\t * ๐Ÿš€ ๋ฒ”์šฉ ์ฒญํฌ ์ „์†ก (ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊นŒ์ง€ ๋™์  ์„ค์ •)\n\t * @param {string} url - API ์ฃผ์†Œ\n\t * @param {Array} rows - ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด\n\t * @param {object} options - ์ƒ์„ธ ์˜ต์…˜\n\t * - fileKey: ๊ฐ์ฒด ๋‚ด ํŒŒ์ผ ์†์„ฑ๋ช… (๊ธฐ๋ณธ: 'fileContents')\n\t * - filePartName: ์„œ๋ฒ„์—์„œ ๋ฐ›์„ ํŒŒ์ผ ํŒŒํŠธ๋ช… (๊ธฐ๋ณธ: 'files')\n\t * - jsonPartName: ์„œ๋ฒ„์—์„œ ๋ฐ›์„ JSON ํŒŒํŠธ๋ช… (๊ธฐ๋ณธ: 'dataList')\n\t * - chunkSize: ๋ถ„ํ•  ๋‹จ์œ„ (๊ธฐ๋ณธ: 10)\n\t */\n\tstatic postMultipart = async (url, rows = [], options = {}) => {\n\t\tconst {\n\t\t\tfileKey = 'fileContents',\n\t\t\tfilePartName = 'files',\n\t\t\tjsonPartName = 'dataList',\n\t\t\tchunkSize = 10\n\t\t} = options;\n\n\t\tconst dataRows = Array.isArray(rows) ? rows : [rows];\n\n\t\tLoading.show();\n\t\tlet totalCount = 0;\n\t\tlet lastResponse = null;\n\n\t\treturn (async () => {\n\t\t\tfor (let i = 0; i < dataRows.length; i += chunkSize) {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tconst chunk = dataRows.slice(i, i + chunkSize);\n\t\t\t\tconst rowDataList = [];\n\n\t\t\t\tchunk.forEach((row) => {\n\t\t\t\t\t// row์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ์™€ ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ\n\t\t\t\t\tconst { [fileKey]: fileData, ...rest } = row;\n\t\t\t\t\trowDataList.push(rest);\n\n\t\t\t\t\t// 2๋ฒˆ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ: ๋ฐฐ์—ด์ด๋“  ์•„๋‹ˆ๋“  ๋ช…ํ™•ํžˆ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ด\n\t\t\t\t\tconst files = Array.isArray(fileData) ? fileData : [fileData];\n\n\t\t\t\t\tfiles.forEach(fileObj => {\n\t\t\t\t\t\tif (fileObj instanceof File) {\n\t\t\t\t\t\t\tformData.append(filePartName, fileObj);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// ๐Ÿ”ด ํŒŒ์ผ์ด ์—†์„ ๋•Œ ๋”๋ฏธ(๋นˆ ํŒŒ์ผ)๋ฅผ ๋„ฃ์–ด ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถค!\n\t\t\t\t\t\t\tformData.append(filePartName, new File([], \"empty_file\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t// JSON ๋ฐ์ดํ„ฐ๋ฅผ FormData์— ์ถ”๊ฐ€\n\t\t\t\t//const jsonBlob = new Blob([JSON.stringify(rowDataList)], { type: 'application/json' });\n\t\t\t\tconst jsonBlob = new Blob(\n\t\t\t\t\t[JSON.stringify(Array.isArray(rows) ? rowDataList : rowDataList[0])],\n\t\t\t\t\t{ type: 'application/json' }\n\t\t\t\t);\n\t\t\t\tformData.append(jsonPartName, jsonBlob);\n\n\t\t\t\tlastResponse = await this.post(url, formData, false);\n\n\t\t\t\tif (lastResponse && (lastResponse.success || lastResponse.status === 'OK')) {\n\t\t\t\t\ttotalCount += chunk.length;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`์ฒญํฌ ์ „์†ก ์‹คํŒจ: ${i}๋ฒˆ์งธ ์„น์…˜`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...lastResponse, success: true, totalCount };\n\t\t})()\n\t\t\t.finally(() => Loading.hide());\n\t};\n\n\tstatic postMultipart_BAK = async (url, rows = [], options = {}) => {\n\t\tconst {\n\t\t\tfileKey = 'fileContents',\n\t\t\tfilePartName = 'files',\n\t\t\tjsonPartName = 'dataList',\n\t\t\tchunkSize = 10\n\t\t} = options;\n\n\t\t// 1. ์‹œ์ž‘ ์ „ ๋กœ๋”ฉ๋ฐ” ๋„์šฐ๊ธฐ\n\t\tLoading.show();\n\n\t\tlet totalCount = 0;\n\t\tlet lastResponse = null;\n\n\t\t// ๐Ÿ”ด 2. ์ „์ฒด ๋ฃจํ”„๋ฅผ Promise ์ฒด์ธ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ (๋‚ด๋ถ€๋Š” await ์œ ์ง€)\n\t\treturn (async () => {\n\t\t\tfor (let i = 0; i < rows.length; i += chunkSize) {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tconst chunk = rows.slice(i, i + chunkSize);\n\t\t\t\tconst rowDataList = [];\n\n\t\t\t\tchunk.forEach((row) => {\n\t\t\t\t\tconst { [fileKey]: fileObj, _fileObj, ...rest } = row;\n\t\t\t\t\trowDataList.push(rest);\n\t\t\t\t\tif (fileObj instanceof File) {\n\t\t\t\t\t\tformData.append(filePartName, fileObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tconst jsonBlob = new Blob([JSON.stringify(rowDataList)], { type: 'application/json' });\n\t\t\t\tformData.append(jsonPartName, jsonBlob);\n\n\t\t\t\t// showLoading = false๋กœ ๋‚ด๋ถ€ ํ˜ธ์ถœ\n\t\t\t\tlastResponse = await this.post(url, formData, false);\n\n\t\t\t\tif (lastResponse && (lastResponse.success || lastResponse.status === 'OK')) {\n\t\t\t\t\ttotalCount += chunk.length;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`์ฒญํฌ ์ „์†ก ์‹คํŒจ: ${i}๋ฒˆ์งธ ์„น์…˜`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...lastResponse, success: true, totalCount };\n\t\t})()\n\t\t\t.catch(err => {\n\t\t\t\ttrace.error(\"[postChunk] Error:\", err);\n\t\t\t\tthrow err;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// ๐Ÿ”ด 3. ์„ฑ๊ณตํ•˜๋“  ์‹คํŒจํ•˜๋“  ์—ฌ๊ธฐ์„œ ๊น”๋”ํ•˜๊ฒŒ ๋‹ซ๊ธฐ!\n\t\t\t\tLoading.hide();\n\t\t\t});\n\t};\n}\n\nexport const api = Fetch;","// nxDialog.styles.js\nexport const dialogStyles = `\n\tdialog::backdrop {\n\t\tbackground: rgba(0, 0, 0, 0.3);\n\t}\n\t\n\tdialog:modal {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding: 0;\n\t\toverflow: hidden;\n\t\tborder: 1px solid darkgreen;\n\t\toutline: none;\n\t\tresize: both;\n\t\tbox-shadow: 0 0 4px 0 darkgreen;\n width: 500px;\n height: fit-content;\n min-width: 330px;\n min-height: 60px;\n max-height: 100%;\n }\n \n \n \n \n\tdiv.head .rect1, div.head .rect2, div.head .rect3 {\n\t\tdisplay: none;\n\t\twidth: 50px;\n\t\theight: 100%;\n\t}\n\tdiv.head .rect1 {\n\t\tbackground-color: red;\n\t}\n\tdiv.head .rect2 {\n\t\tbackground-color: darkgreen;\n\t}\n\tdiv.head .rect3 {\n\t\tbackground-color: olive;\n\t}\n\t\n\tdiv.head {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t--height: 30px;\n\t\tbackground-color: darkgreen;\n\t\tpadding: 4px;\n\t\tcursor: move;\n\t}\n\tdiv.head:hover {\n\t\tfilter: brightness(110%);\n\t}\n\t\n\tdiv.head span {\n\t\tfont-size: 12px;\n\t\tposition: relative;\n\t}\n\t\n\tdiv.head span.title {\n\t\tcolor: #ddd;\n\t\tmargin-left: 4px;\n\t\tfont-weight: bold;\n\t}\n\t\n\tdiv.head span.sub-title {\n\t\tcolor: #ccc;\n\t\tmargin-left: 8px;\n\t\tfont-style: italic;\n\t}\n\t\n\tdiv.head form {\n\t\tmargin: 0;\n\t}\n\tdiv.head button {\n\t\tmargin-right: 4px;\n\t\tbackground-color: transparent;\n\t\tborder: none;\n\t\tcolor: #ccc;\n\t\tfont-size: x-small;\n\t}\n\tdiv.head button:hover {\n\t\tcursor: pointer;\n\t}\n\t\n\tdiv.contents {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t\tbackground-color: white;\n\t\tcolor: #333;\n\t}\n\tdiv.left {\n\t\tposition: relative;\n\t\twidth: 16px;\n\t\theight: 100%;\n\t\tbackground-color: #ddd;\n\t\tdisplay: none;\n\t}\n\t\n\tdiv.left span {\n\t\twriting-mode: vertical-rl;\n\t\t-moz-user-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t\tuser-select: none;\n\t\tcolor: #ccc;\n\t\tfont-weight: 700;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin-left: 3px;\n\t\tmargin-top: 3px;\n\t}\n\tdiv.close2 {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 3px;\n\t\tcursor: pointer;\n\t\tcolor: #666;\n\t}\n\tdiv.close2 svg:hover {\n\t\tcolor: #999;\n\t}\n\t\n\tdiv.body {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: unset;\n\t\t--border: 3px solid #999;\n\t\t--border-top: none;\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\t\tpadding: 10px;\n\t\tgap: 8px;\n\t\tflex-direction: column;\n\t}\n\t\n\t\n\t\n\t\n\tng-sphere.icon {\n\t\tmargin-left: 8px;\n\t}\n\t\n\t.buttons {\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\tright: 4px;\n\t}\n\t\n\tng-sphere {\n\t\tposition: relative;\n\t\t--width: 16px;\n\t\t--height: 16px;\n\t\tcursor: pointer;\n\t\tmargin-right: 4px;\n\t\tdisplay: flex;\n\t}\n\tng-sphere:hover {\n\t\tfilter: brightness(90%);\n\t}\n\tng-sphere:active {\n\t\tfilter: brightness(80%);\n\t}\n\t\n\tng-sphere:hover::after {\n\t\tcontent: \"\";\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t}\n\tng-sphere.apply:hover::after {\n\t\tbackground-size: 14px 14px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"2.5,7 6,10 11,3\" style=\"fill:none;stroke:white;stroke-width:2px;\" /></svg>');\n\t}\n\t\n\tng-sphere.reset:hover::after {\n\t\tbackground-size: 12px 12px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" style=\"fill:none;stroke:white;stroke-width:2px;\" focusable=\"false\" aria-hidden=\"true\"><path d=\"M10 5h5V0\"></path><path d=\"M15 8a6.957 6.957 0 0 1-7 7 6.957 6.957 0 0 1-7-7 6.957 6.957 0 0 1 7-7 6.87 6.87 0 0 1 6.3 4\"></path></svg>');\n\t}\n\t\n\tng-sphere.close:hover::after {\n\t\tbackground-size: 12px 12px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"fill:none;stroke:white;stroke-width:2px;\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 16 16\"><path d=\"M2 2l12 12M14 2L2 14\"></path></svg>');\n\t}\n\t\n\t\n\tbutton {\n cursor: pointer;\n }\n \n .input-area {\n position: relative;\n height: 100%;\n --display: flex;\n textarea {\n width: 100%;\n height: 100%;\n min-height: 100px;\n padding: 8px;\n box-sizing: border-box;\n resize: none;\n border-radius: 2px;\n border-color: #ccc;\n }\n textarea:focus {\n border-color: green;\n outline: none; /* ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ํŒŒ๋ž€์ƒ‰ ํ…Œ๋‘๋ฆฌ ์ œ๊ฑฐ */\n }\n }\n \n .buttons-confirm {\n position: absolute;\n display: flex;\n justify-content: flex-end;\n bottom: 8px;\n right: 8px;\n }\n \n \n .buttons-confirm button {\n height: 32px;\n margin-right: 8px;\n border: none;\n outline: none;\n width: 60px;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .buttons-confirm button:hover {\n filter: brightness(90%);\n }\n .buttons-confirm button:active {\n color: #ccc;\n }\n \n button.ok {\n --display: none;\n background-color: darkgreen;\n color: white;\n }\n button.cancel {\n color: white;\n background-color: #6c757d;\n }\n \n \n \n div.msg {\n position: relative;\n height: 100%;\n font-size: 14px;\n color: #333;\n padding-bottom: 48px;\n }\n \n .reset, .apply {\n display: none;\n }\n \n \n \n :host(.classic) dialog:modal {\n border: 1px solid #007bff;\n box-shadow: 0 0 4px 0 #007bff;\n }\n \n :host(.classic) div.head {\n background-color: #007bff;\n }\n :host(.classic) div.head:hover {\n filter: brightness(110%);\n }\n \n :host(.classic) div.head span {\n font-size: 12px;\n }\n \n :host(.classic) div.head span.title {\n color: #ddd;\n margin-left: 4px;\n font-weight: bold;\n }\n \n :host(.classic) div.head span.sub-title {\n color: #ccc;\n margin-left: 8px;\n font-style: italic;\n }\n :host(.classic) div.head button {\n margin-right: 4px;\n background-color: transparent;\n border: none;\n color: #ccc;\n font-size: x-small;\n }\n \n \n \n \n :host(.rgb) dialog:modal {\n border: none;\n box-shadow: unset;\n border-top: none;\n }\n \n :host(.rgb) div.left {\n display: block;\n background-color: #ddd;\n }\n :host(.rgb) div.left span {\n color: #ccc;\n }\n :host(.rgb) div.close2 {\n display: block;\n color: #666;\n }\n :host(.rgb) div.close2 svg:hover {\n color: #999;\n }\n :host(.rgb) div.head {\n height: 4px;\n background-color: #999;\n padding: 0;\n }\n :host(.rgb) div.contents {\n height: calc(100% - 4px);\n }\n \n :host(.rgb) div.head ng-sphere,\n :host(.rgb) div.head span,\n :host(.rgb) div.head .buttons {\n display: none;\n }\n \n :host(.rgb) div.head .rect1,\n :host(.rgb) div.head .rect2,\n :host(.rgb) div.head .rect3 {\n display: flex;\n }\n \n \n :host(.rgb) div.head:hover {\n filter: unset;\n }\n \n \n /* --- Animation Core --- */\n:host {\n --nx-duration: 0.4s;\n --nx-timing: cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n/* ๐ŸŽฏ ์ˆ˜์ •: ์• ๋‹ˆ๋ฉ”์ด์…˜ ํด๋ž˜์Šค๊ฐ€ ๋ถ™์€ ๊ฒฝ์šฐ์—๋งŒ ์ดˆ๊ธฐ opacity๋ฅผ 0์œผ๋กœ ์„ค์ • */\n:host(.fade) dialog,\n:host(.zoom) dialog,\n:host(.moveUp) dialog,\n:host(.moveDown) dialog,\n:host(.moveLeft) dialog,\n:host(.moveRight) dialog,\n:host(.roadRunner) dialog {\n opacity: 0;\n}\n\n/* shake๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚ด๋ถ€์—์„œ opacity๋ฅผ ๋‹ค๋ฃจ๋ฏ€๋กœ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ์ฒ˜๋ฆฌ */\n:host(.shake) dialog { \n opacity: 1; \n}\n\n/* 1. Fade (์„œ์„œํžˆ ๋‚˜ํƒ€๋‚จ) */\n:host(.fade) dialog { animation: nx-fade-in var(--nx-duration) forwards; }\n@keyframes nx-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n/* 2. Zoom (์ปค์ง€๋ฉฐ ๋‚˜ํƒ€๋‚จ) */\n:host(.zoom) dialog { animation: nx-zoom-in var(--nx-duration) var(--nx-timing) forwards; }\n@keyframes nx-zoom-in { from { opacity: 0; transform: scale(0.5); } to { opacity: 1; transform: scale(1); } }\n\n/* 3. Slide (์ƒํ•˜์ขŒ์šฐ) */\n:host(.moveUp) dialog { animation: nx-move-up var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveDown) dialog { animation: nx-move-down var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveLeft) dialog { animation: nx-move-left var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveRight) dialog { animation: nx-move-right var(--nx-duration) var(--nx-timing) forwards; }\n\n@keyframes nx-move-up { from { opacity: 0; transform: translateY(100px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes nx-move-down { from { opacity: 0; transform: translateY(-100px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes nx-move-left { from { opacity: 0; transform: translateX(100px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes nx-move-right { from { opacity: 0; transform: translateX(-100px); } to { opacity: 1; transform: translateY(0); } }\n\n/* 4. Shake (์ƒํ•˜์ขŒ์šฐ ๊ฒฉ๋ ฌํ•œ ์ง„๋™ - ์—๋Ÿฌ ์ธ์ง€์šฉ) */\n:host(.shake) dialog { \n animation: nx-heavy-shake 0.5s cubic-bezier(.36,.07,.19,.97) both;\n opacity: 1; \n}\n\n@keyframes nx-heavy-shake {\n 10%, 90% { transform: translate3d(-1px, -2px, 0); }\n 20%, 80% { transform: translate3d(2px, 4px, 0); }\n 30%, 50%, 70% { transform: translate3d(-6px, -6px, 0); }\n 40%, 60% { transform: translate3d(6px, 6px, 0); }\n}\n\n/* 5. Road Runner (๋“ฑ์žฅ: ์™ผ์ชฝ์—์„œ ํƒ„๋ ฅ ์žˆ๊ฒŒ / ํ‡ด์žฅ: ์›€์ธ ๋ ธ๋‹ค๊ฐ€ ๊ด‘์† ํƒˆ์ถœ) */\n:host(.roadRunner) dialog { \n animation: roadRunnerIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; \n}\n\n@keyframes roadRunnerIn {\n 0% { transform: translateX(-1500px) skewX(30deg); opacity: 1; }\n 70% { transform: translateX(30px) skewX(-10deg); opacity: 1; }\n 100% { transform: translateX(0) skewX(0deg); opacity: 1; }\n}\n\n/* --- Out Animations (๋‹ซํž ๋•Œ) --- */\ndialog.out { pointer-events: none; }\n\n/* Road Runner ํ‡ด์žฅ: ์Šฅ ์›€์ธ ๋ ธ๋‹ค๊ฐ€(Anticipation) ์Œฉ~! */\n:host(.roadRunner) dialog.out { \n animation: roadRunnerOut 0.5s cubic-bezier(0.6, -0.28, 0.735, 0.045) forwards; \n}\n\n@keyframes roadRunnerOut {\n 0% { \n transform: translateX(0) scale(1) skewX(0deg); \n opacity: 1; \n }\n 30% { \n /* ์˜ˆ๋น„ ๋™์ž‘: ๋’ค๋กœ ์‚ด์ง ๊ฐ”๋‹ค๊ฐ€ ์›€์ธ ๋Ÿฌ๋“ค๊ธฐ */\n transform: translateX(50px) scaleX(1.2) scaleY(0.8) skewX(-20deg); \n opacity: 1; \n }\n 100% { \n /* ๋ฐœ์‚ฌ: ๊ธธ๊ฒŒ ๋Š˜์–ด๋‚˜๋ฉฐ ๊ด‘์† ํƒˆ์ถœ */\n transform: translateX(2000px) scaleX(4) scaleY(0.3) skewX(50deg); \n opacity: 0; \n filter: blur(10px); /* ๐Ÿ‘ˆ ์ž”์ƒ ๋А๋‚Œ ์ถ”๊ฐ€ */\n }\n}\n\n/* ์ผ๋ฐ˜ ํ‡ด์žฅ (๊ธฐ๋ณธ) */\ndialog.out { animation: nx-fade-out 0.3s forwards; }\n@keyframes nx-fade-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.9); } }\n`;","import { dialogStyles } from './style.dialog.js';\nimport { trace } from '@nopeer';\n\nexport class nineDialog extends HTMLElement\n{\n\t#shift;\n\t#dialog;\n\n\tconstructor () {\n\t\tsuper();\n\t}\n\n\tconnectedCallback() {\n\n\t\tconst v = this.innerHTML;\n\t\tconst titleText = this.getAttribute(\"subject\") || \"Details\";\n\n\t\ttrace.log(dialogStyles);\n\n\t\tthis.innerHTML = `\n\t\t\t<style>${dialogStyles}</style>\n\t\t\n\t\t\t<dialog>\n\t\t\t\t<div class=\"head\">\n\t\t\t\t\t<div class=\"rect1\"></div>\n\t\t\t\t\t<div class=\"rect2\"></div>\n\t\t\t\t\t<div class=\"rect3\"></div>\n\t\t\t\t\t<ng-sphere class=\"icon\" end-fill=\"#666\" size=\"8\"></ng-sphere>\n\t\t\t\t\t<span class=\"title\">${titleText}</span>\n\t\t\t\t\t<span class=\"sub-title\"></span>\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<ng-sphere class=\"apply\" start-fill=\"#cc6\" end-fill=\"#660\" size=\"16\" title=\"apply\"></ng-sphere>\n\t\t\t\t\t\t<ng-sphere class=\"reset\" start-fill=\"#99f\" end-fill=\"#00f\" size=\"16\" title=\"reset\"></ng-sphere>\n\t\t\t\t\t\t<ng-sphere class=\"close\" start-fill=\"#f99\" end-fill=\"#f00\" size=\"16\" title=\"close\"></ng-sphere>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"contents\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<span>๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"body\">\n\t\t\t\t\t\t${v}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"close2\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</dialog>\n\t\t`;\n\n\t\t//this.#owner = this.getRootNode().host.closest(\"nine-grid\");\n\n\t\t//$(\".title\", this).html(\"Details\");\n\n\t\tthis.#dialog = this.querySelector('dialog');\n\t\tthis.#init();\n\t};\n\n\tshowModal = () => {\n\t\tthis.#dialog.showModal();\n\n\t\t(this.shadowRoot?.activeElement || document.activeElement)?.blur();\n\t};\n\n\tclose = () => {\n\t\t// ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ (ํ‘œ์ค€ ๋ฐฉ์‹์€ ํ•ธ๋“ค๋Ÿฌ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ,\n\t\t// ์—ฌ๊ธฐ์„œ๋Š” ์š”์†Œ๊ฐ€ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ •๋ฆฌ)\n\t\tthis.#dialog.close();\n\t\tthis.remove();\n\t};\n\n\t#init = () => {\n\t\tconst head = this.querySelector('.head');\n\n\t\tif (head) {\n\t\t\thead.addEventListener('mousedown', this.#onMouseDown);\n\t\t\thead.addEventListener('touchstart', this.#onTouchStart);\n\n\t\t\t// ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋“œ๋ž˜๊ทธ ๊ฐ€๋Šฅ ์•„์ด์ฝ˜(์ด๋™ ์‹ญ์ž๊ฐ€) ๋ชจ์–‘์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ UX ๊ฐœ์„ \n\t\t\t//head.style.cursor = 'move';\n\t\t}\n\n\t\t// 1. ๋ชจ๋“  ๋‹ซ๊ธฐ ์„ฑ๊ฒฉ์˜ ๋ฒ„ํŠผ (.close, .close2, .cancel) ๊ณตํ†ต ์ฒ˜๋ฆฌ\n\t\tthis.querySelectorAll('.close, .close2, .cancel').forEach(btn => {\n\t\t\tbtn.onclick = () => this.closeWithAnimation(null); // ์ทจ์†Œ/๋‹ซ๊ธฐ๋Š” null ๋ฆฌํ„ด\n\t\t});\n\n\t\t// 2. ํ™•์ธ ๋ฒ„ํŠผ (.ok) ์ฒ˜๋ฆฌ\n\t\t// ํ™•์ธ ๋ฒ„ํŠผ์€ ํ…์ŠคํŠธ ์ž…๋ ฅ๊ฐ’ ๋“ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ\n\t\t// ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์€ ๊ฐ ํŒ์—… ํด๋ž˜์Šค(prompt ๋“ฑ)์—์„œ ํ•˜๋˜,\n\t\t// ๋‹ซ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹คํ–‰์€ ์—ฌ๊ธฐ์„œ ๋‹ด๋‹นํ•˜๋„๋ก ๊ฐ€์ด๋“œํ•ฉ๋‹ˆ๋‹ค.\n\t\tthis.querySelectorAll('.ok').forEach(btn => {\n\t\t\t// .ok ๋ฒ„ํŠผ์˜ ๋กœ์ง์€ ๊ฐ ํŒ์—…์˜ setupEvents์—์„œ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜\n\t\t\t// ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n\t\t});\n\n\t\t// ๋“œ๋ž˜๊ทธ ๋กœ์ง ์ƒ๋žต...\n\t};\n\n\t// --- ๋“œ๋ž˜๊ทธ ๋กœ์ง (Vanilla JS) ---\n\t#onMouseDown = e => {\n\n\t\tif (e.target.closest(\"buttons\")) return;\n\t\tif (e.button !== 0 || e.altKey || e.ctrlKey || e.shiftKey) return;\n\n\t\tconst rect = this.#dialog.getBoundingClientRect();\n\t\tthis.#shift = {\n\t\t\tx: e.clientX - rect.left,\n\t\t\ty: e.clientY - rect.top\n\t\t};\n\n\t\tconst onMouseMove = (ev) => {\n\t\t\tthis.#dialog.style.position = 'fixed';\n\t\t\tthis.#dialog.style.margin = '0';\n\t\t\tthis.#dialog.style.left = `${ev.clientX - this.#shift.x}px`;\n\t\t\tthis.#dialog.style.top = `${ev.clientY - this.#shift.y}px`;\n\t\t};\n\n\t\tconst onMouseUp = () => {\n\t\t\tdocument.removeEventListener('mousemove', onMouseMove);\n\t\t\tdocument.removeEventListener('mouseup', onMouseUp);\n\t\t};\n\n\t\tdocument.addEventListener('mousemove', onMouseMove);\n\t\tdocument.addEventListener('mouseup', onMouseUp);\n\t};\n\n\t#onTouchStart = e => {\n\t\tif (e.target.closest(\"buttons\")) return;\n\n\t\tconst rect = this.#dialog.getBoundingClientRect();\n\t\tconst touch = e.changedTouches[0];\n\t\tthis.#shift = {\n\t\t\tx: touch.pageX - rect.left,\n\t\t\ty: touch.pageY - rect.top\n\t\t};\n\n\t\tconst onTouchMove = (ev) => {\n\t\t\tconst t = ev.changedTouches[0];\n\t\t\tthis.#dialog.style.position = 'fixed';\n\t\t\tthis.#dialog.style.margin = '0';\n\t\t\tthis.#dialog.style.left = `${t.pageX - this.#shift.x}px`;\n\t\t\tthis.#dialog.style.top = `${t.pageY - this.#shift.y}px`;\n\t\t};\n\n\t\tconst onTouchEnd = () => {\n\t\t\tdocument.removeEventListener('touchmove', onTouchMove);\n\t\t\tdocument.removeEventListener('touchend', onTouchEnd);\n\t\t};\n\n\t\tdocument.addEventListener('touchmove', onTouchMove);\n\t\tdocument.addEventListener('touchend', onTouchEnd);\n\t};\n\n\tcloseWithAnimation(returnValue) {\n\t\tthis.#dialog.classList.add(\"out\"); // ํ‡ด์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘\n\n\t\t// ์• ๋‹ˆ๋ฉ”์ด์…˜(0.3s)์ด ๋๋‚œ ํ›„ ์ œ๊ฑฐ ๋ฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ\n\t\tsetTimeout(() => {\n\t\t\tthis.#dialog.close();\n\t\t\t// ๋ถ€๋ชจ(BasePopup)์—๊ฒŒ ์ž‘์—… ์™„๋ฃŒ์™€ ๊ฒฐ๊ณผ๊ฐ’์„ ์•Œ๋ฆผ\n\t\t\tthis.dispatchEvent(new CustomEvent('closed', { detail: returnValue }));\n\t\t\tthis.remove();\n\t\t}, 300);\n\t}\n}\n\n// BasePopup.js\nexport class BasePopup extends HTMLElement {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.attachShadow({ mode: 'open' });\n\t}\n\n\tstatic async open(PopupClass, message, title, options, renderFn) {\n\t\t// 1. ์„ค์ • ๋ณ‘ํ•ฉ\n\t\tconst tagName = PopupClass.tagName.toLowerCase();\n\t\tconst config = {\n\t\t\t\"true-text\": \"ํ™•์ธ\",\n\t\t\t\"false-text\": \"์ทจ์†Œ\",\n\t\t\tclass: \"classic\",\n\t\t\tanimation: \"fade\",\n\t\t\t...(window.nine?.config?.ux?.[tagName.replace('nine-', '').replace('-popup', '')] || {}),\n\t\t\t...options\n\t\t};\n\n\t\t// 2. ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ\n\t\tdocument.querySelectorAll(tagName).forEach(el => el.remove());\n\t\tconst el = document.createElement(tagName);\n\t\tif (config.class) el.classList.add(config.class);\n\t\tif (config.animation) el.classList.add(config.animation);\n\t\tdocument.body.appendChild(el);\n\n\t\t// 3. ๋ Œ๋”๋ง (๊ฐ ํŒ์—…์˜ UI ๊ทธ๋ฆฌ๊ธฐ)\n\t\trenderFn(el, message, config);\n\n\t\tconst dialogComp = el.shadowRoot.querySelector(\"nine-dialog\");\n\t\tif (title) dialogComp.setAttribute(\"subject\", title);\n\n\t\treturn new Promise((resolve) => {\n\t\t\t// [์ค‘์š”] nine-dialog์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚œ ํ›„ ๋˜์ง€๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ \n\t\t\tdialogComp.addEventListener('closed', (e) => resolve(e.detail));\n\n\t\t\t// ๊ฐ ํŒ์—… ํด๋ž˜์Šค์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ dialogComp.closeWithAnimation(๊ฐ’)์„\n\t\t\t// ํ˜ธ์ถœํ•˜๋„๋ก ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ด์คŒ\n\t\t\tel.setupEvents(resolve, dialogComp);\n\n\t\t\tdialogComp.showModal();\n\t\t});\n\t}\n}\n\nif (!customElements.get('nine-dialog')) {\n\tcustomElements.define(\"nine-dialog\", nineDialog);\n}\n","import { BasePopup } from \"./nineDialog.js\";\n\nexport class nineConfirmPopup extends BasePopup {\n\tstatic tagName = 'nine-confirm-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\n\trender(message, config) {\n\t\tthis.shadowRoot.innerHTML = `\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">${config[\"false-text\"]}</button>\n <button class=\"ok\">${config[\"true-text\"]}</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\tthis.shadowRoot.querySelector(\".ok\").onclick = () => dialogComp.closeWithAnimation(true);\n\t\t// ์ทจ์†Œ๋Š” nine-dialog ๋‚ด๋ถ€ ๊ธฐ๋ณธ ๋กœ์ง(closeWithAnimation(null))์ด ์ฒ˜๋ฆฌํ•จ\n\t}\n\n\tstatic confirm = (m, t, o) => BasePopup.open(nineConfirmPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\n// --- 3. ALERT (๋‹จ์ˆœ ์•Œ๋ฆผ) ---\nexport class nineAlertPopup extends BasePopup {\n\tstatic tagName = 'nine-alert-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\trender(message, config) {\n\t\tthis.shadowRoot.innerHTML = `\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">ํ™•์ธ</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\t// ์–ผ๋Ÿฟ์€ ์ทจ์†Œ ๋ฒ„ํŠผ ํ•˜๋‚˜๋งŒ ๋‘๊ฑฐ๋‚˜, ํ™•์ธ ๋ฒ„ํŠผ์ด cancel ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ\n\t}\n\n\tstatic alert = (m, t, o) => BasePopup.open(nineAlertPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\n// Custom Element ๋“ฑ๋ก\nif (!customElements.get('nine-confirm-popup')) customElements.define('nine-confirm-popup', nineConfirmPopup);\nif (!customElements.get('nine-alert-popup')) customElements.define(\"nine-alert-popup\", nineAlertPopup);","import { BasePopup } from \"./nineDialog.js\";\n\n/**\n *\n */\nexport class ninePromptPopup extends BasePopup {\n\tstatic tagName = 'nine-prompt-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\trender(message, config) {\n\n\t\ttrace.log(this);\n\t\ttrace.log(this.shadowRoot);\n\n\t\tthis.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\tdialog {\n\t\t\t\t\theight: 300px !important;\n\t\t\t\t}\n\t\t\t\t.msg {\n\t\t\t\t\theight: unset !important;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"input-area\">\n <textarea placeholder=\"๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”...\"></textarea>\n </div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">${config[\"false-text\"]}</button>\n <button class=\"ok\">${config[\"true-text\"]}</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\tconst textarea = this.shadowRoot.querySelector(\"textarea\");\n\t\tconst okBtn = this.shadowRoot.querySelector(\".ok\");\n\n\t\t// ํ™•์ธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ textarea ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‹ซ๊ธฐ\n\t\tokBtn.onclick = () => dialogComp.closeWithAnimation(textarea.value);\n\n\t\t// ๋ Œ๋”๋ง ํ›„ ํฌ์ปค์Šค\n\t\trequestAnimationFrame(() => textarea.focus());\n\t}\n\n\tstatic prompt = (m, t, o) => BasePopup.open(ninePromptPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\nif (!customElements.get('nine-prompt-popup')) {\n\tcustomElements.define('nine-prompt-popup', ninePromptPopup);\n}","/**\r\n * ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ try-catch ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ\r\n * @param {Promise} promise\r\n * @returns {Promise<[any, Error|null]>}\r\n */\r\nexport const safe = async (promise) => {\r\n\ttry {\r\n\t\tconst data = await promise;\r\n\t\treturn [data, null];\r\n\t} catch (err) {\r\n\t\treturn [null, err];\r\n\t}\r\n};","// src/core/NineUxUtil.js\r\nimport { nineAlertPopup, nineConfirmPopup } from './nineConfirm.js';\r\nimport { ninePromptPopup } from \"./ninePrompt.js\";\r\nimport { nine } from '../../core/Config.js'; // ๐Ÿš€ 1. Config์—์„œ nine ๊ฐ์ฒด ์ž„ํฌํŠธ\r\n\r\nexport class NineUxUtil {\r\n\t// static ํ•„๋“œ๋Š” ํด๋ž˜์Šค ์ž์ฒด์— ์ €์žฅ๋จ\r\n\tstatic cssPath = \"\";\r\n\r\n\t/**\r\n\t * ํŒ์—… ์ค€๋น„ ๋กœ์ง (Private ๋ฉ”์„œ๋“œ)\r\n\t */\r\n\t#prepare(type, message, title, defaultClass) {\r\n\r\n\t\tconst options = { class: defaultClass, animation: 'fade' };\r\n\t\t//const popup = type === 'alert' ? nineAlertPopup : (type === 'confirm' ? nineConfirmPopup : ninePromptPopup);\r\n\t\tlet isExecuted = false;\r\n\r\n\t\tconst popupMap = {\r\n\t\t\talert: nineAlertPopup,\r\n\t\t\tconfirm: nineConfirmPopup,\r\n\t\t\tprompt: ninePromptPopup\r\n\t\t};\r\n\r\n\t\tconst popup = popupMap[type];\r\n\r\n\t\tconst runner = {\r\n\t\t\trgb: () => { options.class = 'rgb'; return runner; },\r\n\t\t\tclassic: () => { options.class = 'classic'; return runner; },\r\n\t\t\tshake: () => { options.animation = 'shake'; return runner; },\r\n\t\t\trun: () => { options.animation = 'roadRunner'; return runner; },\r\n\t\t\tzoom: () => { options.animation = 'zoom'; return runner; },\r\n\r\n\t\t\tthen: (resolve, reject) => {\r\n\t\t\t\tisExecuted = true;\r\n\t\t\t\treturn popup[type](message, title, options).then(resolve, reject);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Microtask: ๋™๊ธฐ ์ฒด์ด๋‹์ด ๋ชจ๋‘ ๋๋‚œ ํ›„ ์‹คํ–‰\r\n\t\tPromise.resolve().then(() => {\r\n\t\t\tif (!isExecuted) {\r\n\t\t\t\tisExecuted = true;\r\n\t\t\t\tpopup[type](message, title, options);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn runner;\r\n\t}\r\n\r\n\talert = (message, title = \"Alert\") => {\r\n\t\treturn this.#prepare('alert', message, title, 'classic');\r\n\t}\r\n\r\n\tconfirm = (message, title = \"Confirm\") => {\r\n\t\treturn this.#prepare('confirm', message, title, 'classic');\r\n\t}\r\n\r\n\tprompt = (message, title = \"Prompt\") => {\r\n\t\treturn this.#prepare('prompt', message, title, 'classic');\r\n\t}\r\n}\r\n\r\nObject.assign(nine, new NineUxUtil());","import { trace } from \"@nopeer\";\r\nimport { NineUxUtil } from \"./dialog/NineUxUtil.js\";\r\n\r\nclass UxSplitter extends HTMLElement {\r\n\r\n\t#mode;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.attachShadow({ mode: \"open\" });\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\r\n\t\tthis.#init();\r\n\t}\r\n\r\n\t#detectMode = (el) => {\r\n\t\tconst prev = el.previousElementSibling;\r\n\t\tconst next = el.nextElementSibling;\r\n\t\tif (!prev || !next) {\r\n\t\t\tthis.#mode = this.classList.contains('h') ? \"h\" : \"v\";\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst prevRect = prev.getBoundingClientRect();\r\n\t\tconst nextRect = next.getBoundingClientRect();\r\n\r\n\t\tif (this.classList.contains('h')) {\r\n\t\t\tthis.#mode = \"h\";\r\n\t\t} else if (this.classList.contains('v')) {\r\n\t\t\tthis.#mode = \"v\";\r\n\t\t} else {\r\n\t\t\tthis.#mode = (Math.abs(prevRect.top - nextRect.top) < 5) ? \"h\" : \"v\";\r\n\t\t}\r\n\t};\r\n\r\n\t#startDrag = (e) => {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tconst splitterRect = this.getBoundingClientRect();\r\n\t\tconst isHorizontal = this.#mode === \"h\";\r\n\r\n\t\t// ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ์™€ ์Šคํ”Œ๋ฆฌํ„ฐ ์‹œ์ž‘์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ\r\n\t\tconst clickOffset = isHorizontal\r\n\t\t\t? e.clientX - splitterRect.left\r\n\t\t\t: e.clientY - splitterRect.top;\r\n\r\n\t\tconst dragBar = document.createElement(\"div\");\r\n\t\tdragBar.className = `nx-splitter-drag-bar-${this.#mode}`;\r\n\r\n\t\tObject.assign(dragBar.style, {\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tzIndex: \"999\",\r\n\t\t\tbackground: \"#666\",\r\n\t\t\topacity: \"0.6\",\r\n\t\t\tpointerEvents: \"none\"\r\n\t\t});\r\n\r\n\t\tconst root = this.getRootNode({ composed: true });\r\n\t\tconst parent = root instanceof ShadowRoot ? root.host : this.parentElement;\r\n\t\tconst prev = this.previousElementSibling;\r\n\t\tconst next = this.nextElementSibling;\r\n\r\n\t\tif (!parent || !prev || !next) {\r\n\t\t\ttrace.warn(\"Spliter's parent or siblings not found.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t(parent.shadowRoot || parent).appendChild(dragBar);\r\n\t\tconst dragBarOffsetParentRect = dragBar.offsetParent.getBoundingClientRect();\r\n\r\n\t\tconst prevRect = prev.getBoundingClientRect();\r\n\t\tconst nextRect = next.getBoundingClientRect();\r\n\r\n\t\t// ๋“œ๋ž˜๊ทธ ๋ฐ”์˜ ์ดˆ๊ธฐ ์œ„์น˜์™€ ํฌ๊ธฐ ์„ค์ •\r\n\t\tconst initialSplitterPosInParent = (isHorizontal\r\n\t\t\t? splitterRect.left - dragBarOffsetParentRect.left\r\n\t\t\t: splitterRect.top - dragBarOffsetParentRect.top) + clickOffset;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tdragBar.style.top = \"0\";\r\n\t\t\tdragBar.style.left = `${initialSplitterPosInParent}px`;\r\n\t\t\tdragBar.style.width = \"2px\";\r\n\t\t\tdragBar.style.height = \"100%\";\r\n\t\t} else {\r\n\t\t\tdragBar.style.left = \"0\";\r\n\t\t\tdragBar.style.top = `${initialSplitterPosInParent}px`;\r\n\t\t\tdragBar.style.height = \"2px\";\r\n\t\t\tdragBar.style.width = \"100%\";\r\n\t\t}\r\n\r\n\t\tdragBar.style.mixBlendMode = \"difference\";\r\n\t\tdragBar.style.zIndex = \"99999\";\r\n\r\n\t\tconst minLimit = isHorizontal\r\n\t\t\t? prevRect.left - dragBarOffsetParentRect.left\r\n\t\t\t: prevRect.top - dragBarOffsetParentRect.top;\r\n\t\tconst maxLimit = isHorizontal\r\n\t\t\t? nextRect.right - dragBarOffsetParentRect.left - splitterRect.width\r\n\t\t\t: nextRect.bottom - dragBarOffsetParentRect.top - splitterRect.height;\r\n\r\n\t\tconst onMove = moveEvent => {\r\n\t\t\tconst clientPos = isHorizontal ? moveEvent.clientX : moveEvent.clientY;\r\n\t\t\tconst currentPosInParent = isHorizontal\r\n\t\t\t\t? clientPos - dragBarOffsetParentRect.left\r\n\t\t\t\t: clientPos - dragBarOffsetParentRect.top;\r\n\r\n\t\t\tconst clampedPos = Math.max(minLimit, Math.min(currentPosInParent, maxLimit));\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tdragBar.style.left = `${clampedPos}px`;\r\n\t\t\t} else {\r\n\t\t\t\tdragBar.style.top = `${clampedPos}px`;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst onUp = () => {\r\n\t\t\twindow.removeEventListener(\"mousemove\", onMove);\r\n\t\t\twindow.removeEventListener(\"mouseup\", onUp);\r\n\t\t\tdragBar.remove();\r\n\r\n\t\t\tconst allChildren = Array.from(parent.children);\r\n\t\t\tconst allPanels = allChildren.filter(el => el.tagName.toLowerCase() !== 'nx-splitter');\r\n\r\n\t\t\t// โญโญ gap ํฌ๊ธฐ ๊ณ„์‚ฐ โญโญ\r\n\t\t\tconst style = window.getComputedStyle(parent);\r\n\t\t\tconst gapValue = isHorizontal ? style.getPropertyValue('column-gap') : style.getPropertyValue('row-gap');\r\n\t\t\tconst gapSize = parseFloat(gapValue) || 0;\r\n\t\t\tconst gapCount = allChildren.length > 1 ? allChildren.length - 1 : 0;\r\n\t\t\tconst totalGapSize = gapCount * gapSize;\r\n\r\n\t\t\tconst finalDragBarPos = isHorizontal ? parseFloat(dragBar.style.left) : parseFloat(dragBar.style.top);\r\n\t\t\tconst dragOffset = finalDragBarPos - initialSplitterPosInParent;\r\n\r\n\t\t\tconst prevSize = isHorizontal ? prev.getBoundingClientRect().width : prev.getBoundingClientRect().height;\r\n\t\t\tconst nextSize = isHorizontal ? next.getBoundingClientRect().width : next.getBoundingClientRect().height;\r\n\r\n\t\t\tlet newPrevSize = prevSize + dragOffset;\r\n\t\t\tlet newNextSize = nextSize - dragOffset;\r\n\r\n\t\t\t// ํŒจ๋„ ํฌ๊ธฐ๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์ œํ•œํ•˜๊ณ , ๋‹ค๋ฅธ ํŒจ๋„์— ์ฐจ์ด๋ฅผ ๋ณด์ •\r\n\t\t\tif (newPrevSize < 0) {\r\n\t\t\t\tnewNextSize += newPrevSize;\r\n\t\t\t\tnewPrevSize = 0;\r\n\t\t\t}\r\n\t\t\tif (newNextSize < 0) {\r\n\t\t\t\tnewPrevSize += newNextSize;\r\n\t\t\t\tnewNextSize = 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst initialSizes = allPanels.map(panel => isHorizontal ? panel.getBoundingClientRect().width : panel.getBoundingClientRect().height);\r\n\r\n\t\t\tconst totalSplitterSize = allChildren.reduce((sum, child) => {\r\n\t\t\t\tif (child.tagName.toLowerCase() === 'nx-splitter') {\r\n\t\t\t\t\treturn sum + (isHorizontal ? child.getBoundingClientRect().width : child.getBoundingClientRect().height);\r\n\t\t\t\t}\r\n\t\t\t\treturn sum;\r\n\t\t\t}, 0);\r\n\r\n\t\t\tconst totalContainerSize = (isHorizontal ? parent.getBoundingClientRect().width : parent.getBoundingClientRect().height);\r\n\t\t\tconst totalFlexSpace = totalContainerSize - totalSplitterSize - totalGapSize;\r\n\r\n\t\t\tlet flexSum = 0;\r\n\t\t\tallPanels.forEach((panel, index) => {\r\n\t\t\t\tlet newSize;\r\n\t\t\t\tif (panel === prev) {\r\n\t\t\t\t\tnewSize = newPrevSize;\r\n\t\t\t\t} else if (panel === next) {\r\n\t\t\t\t\tnewSize = newNextSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewSize = initialSizes[index];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst newFlexBasis = newSize / totalFlexSpace;\r\n\t\t\t\t//panel.style.flex = `${newFlexBasis} ${newFlexBasis} 0`;\r\n\r\n\t\t\t\ttrace.log(panel);\r\n\r\n\t\t\t\tif (panel.classList.contains('sidebar')) {\r\n\t\t\t\t\t// ๋“œ๋ž˜๊ทธ๊ฐ€ ๋๋‚œ ์‹œ์ ์˜ newSize(px)๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณ ์ •๊ฐ’์œผ๋กœ ํ• ๋‹น\r\n\t\t\t\t\t// ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„์œจ(%)์ด ์•„๋‹ˆ๋ผ ๋”ฑ ๊ทธ ํ”ฝ์…€๋งŒํผ๋งŒ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.\r\n\t\t\t\t\tpanel.style.flex = `0 0 ${newSize}px`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// ๋‚˜๋จธ์ง€ ๋ฉ”์ธ ๋ณด๋“œ ๊ฐ™์€ ์œ ์—ฐํ•œ ํŒจ๋„์€ ๋น„์œจ(%)๋กœ ์ฒ˜๋ฆฌ\r\n\t\t\t\t\t//const newFlexBasis = newSize / totalFlexSpace;\r\n\t\t\t\t\tpanel.style.flex = `${newFlexBasis} ${newFlexBasis} 0`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tflexSum += newFlexBasis;\r\n\t\t\t});\r\n\r\n\t\t\ttrace.log(`dragOffset: ${dragOffset}`);\r\n\t\t\ttrace.log(`Calculated FlexSum: ${flexSum}`);\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"mousemove\", onMove);\r\n\t\twindow.addEventListener(\"mouseup\", onUp);\r\n\t};\r\n\r\n\tget cssPath() {\r\n\t\treturn this.getAttribute(\"css-path\") || NineUxUtil.cssPath;\r\n\t}\r\n\r\n\t#init = () => {\r\n\t\tthis.#detectMode(this);\r\n\t\tthis.classList.add(this.#mode);\r\n\r\n\t\tconst contents = this.innerHTML.trim();\r\n\t\t//const gripClass = `grip-${this.#mode}`;\r\n\t\tconst gripTmpl = (contents === \"\") ? `<div class=\"grip\"></div>` : `<div class=\"grip\"></div><div class=\"inner-container\">${contents}</div><div class=\"grip\"></div>`;\r\n\r\n\t\tconst customImport = nine.cssPath ? `@import \"${nine.cssPath}/nine-util.css\";` : \"\";\r\n\r\n\t\tthis.innerHTML = \"\";\r\n\t\tconst htmlTmpl = document.createElement(\"template\");\r\n\r\n\t\thtmlTmpl.innerHTML = `\r\n\t\t\t<style>\r\n\t\t\t\t@import \"https://cdn.jsdelivr.net/npm/@ninebone/util@${__APP_VERSION__}/dist/css/nine-util.css\";\r\n\t\t\t\t${customImport}\r\n\t\t\t</style>\r\n\t\t\t${gripTmpl}\r\n `;\r\n\r\n\t\tthis.shadowRoot.appendChild(htmlTmpl.content.cloneNode(true));\r\n\r\n\t\tthis.shadowRoot.querySelectorAll(\".grip\").forEach(el => {\r\n\t\t\tel.addEventListener(\"mousedown\", e => this.#startDrag(e));\r\n\t\t});\r\n\r\n\t\tthis.#prepareLayout();\r\n\r\n\t\twindow.addEventListener(\"resize\", () => this.#prepareLayout());\r\n\t};\r\n\r\n\t#prepareLayout = () => {\r\n\t\tconst isHorizontal = this.#mode === \"h\";\r\n\t\tconst parent = this.parentElement;\r\n\t\tconst allPanels = Array.from(parent.children).filter(el => el.tagName.toLowerCase() !== 'nx-splitter');\r\n\t\tif (allPanels.length < 2) return;\r\n\r\n\t\tconst parentRect = parent.getBoundingClientRect();\r\n\t\tconst totalContentSize = allPanels.reduce((sum, el) => {\r\n\t\t\tconst size = isHorizontal ? el.getBoundingClientRect().width : el.getBoundingClientRect().height;\r\n\t\t\treturn sum + size;\r\n\t\t}, 0);\r\n\t\tconst totalParentSize = isHorizontal ? parentRect.width : parentRect.height;\r\n\r\n\t\tallPanels.forEach(panel => {\r\n\t\t\tconst size = isHorizontal ? panel.getBoundingClientRect().width : panel.getBoundingClientRect().height;\r\n\t\t\tconst newSize = totalParentSize * (size / totalContentSize);\r\n\t\t\tconst flexGrow = newSize / totalParentSize;\r\n\t\t\tpanel.style.flex = `${flexGrow} ${flexGrow} 0`;\r\n\t\t});\r\n\t};\r\n}\r\n\r\nif (!customElements.get('nine-splitter')) {\r\n\tcustomElements.define(\"nine-splitter\", UxSplitter);\r\n}","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { trace } from \"@nopeer\";\n\n// ๐ŸŽฏ ๋ณต์žกํ•œ ์ƒ์†์„ ์ง€์šฐ๊ณ  ํŒ์—… ๊ณ ์œ ์˜ ์—ญํ• (๊ป๋ฐ๊ธฐ ์กฐ๋ฆฝ)๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.\nexport class NinePopup extends HTMLElement {\n\tstatic get tagName() { return \"nine-popup\"; }\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.attachShadow({ mode: 'open' });\n\t}\n\n\tconnectedCallback() {\n\t\t// ๐Ÿ”’ Shadow DOM ๋‚ด๋ถ€์— nine-dialog ๋ ˆ์ด์•„์›ƒ ๊ตฌ์ถ•\n\t\tthis.shadowRoot.innerHTML = `\n\t\t\t<nine-dialog>\n\t\t\t\t<div class=\"popup-body\"></div>\n\t\t\t</nine-dialog>\n\t\t`;\n\t}\n\n\tclose(returnValue = null) {\n\t\tconst $dialog = this.dialog;\n\t\tif ($dialog) {\n\t\t\t// ๐ŸŽฏ ๊ตฌ์งˆ๊ตฌ์งˆํ•œ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๋Œ€์‹ , ๊ธฐ์กด ์ž์‚ฐ์ธ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ข…๋ฃŒ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํƒ€๊ฒฉํ•ฉ๋‹ˆ๋‹ค.\n\t\t\t$dialog.closeWithAnimation(returnValue);\n\t\t}\n\t}\n\n\t// ๐Ÿ”“ ๋ฆฌ์•กํŠธ ์—”์ง„์ด ๊ฝ‚์•„ ๋„ฃ์„ ์ž…๊ตฌ ํฌ์ธํ„ฐ ๊ฐœ๋ฐฉ\n\tget popupBody() {\n\t\treturn this.shadowRoot?.querySelector('nine-dialog .popup-body') || null;\n\t}\n\n\t// ๐Ÿ”“ ๋ฆฌ์•กํŠธ๋‚˜ ์™ธ๋ถ€ ์œ ํ‹ธ์—์„œ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ํ†ต๋กœ\n\tget dialog() {\n\t\treturn this.shadowRoot?.querySelector('nine-dialog') || null;\n\t}\n}\n\nif (!customElements.get('nine-popup')) customElements.define('nine-popup', NinePopup);","import { nine } from '../core/Config.js';\r\nimport dayjs from \"dayjs\";\r\nimport React from 'react'; // ๐ŸŽฏ React ๋‚ด์žฅ ํ—ฌํผ ์ž„ํฌํŠธ\r\nimport { createRoot } from 'react-dom/client';\r\nimport { NinePopup } from './NinePopup.js';\r\n\r\nexport class NineUtil {\r\n\r\n\t// ๐Ÿ“… 1. ๋‚ ์งœ ํฌ๋งท ํ—ฌํผ (์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ)\r\n\tformatDate = (v, fmt) => {\r\n\t\treturn dayjs(v).format(fmt);\r\n\t};\r\n\r\n\t/**\r\n\t * ๐Ÿ”ฎ ์ดˆ๊ฐ„๋‹จ ๋งŒ๋Šฅ ๋“œ๋ž˜๊ทธ ํŒ์—… ์—”์ง„ (Promise/Then ๊ทœ๊ฒฉ)\r\n\t * @param {React.Component} ContentComponent - ํŒ์—… ๋‚ด๋ถ€์— ๋„์šธ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ\r\n\t * @param {Object} param - ํŒ์—… ์•Œ๋งน์ด์— 'data'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐฐ๋‹ฌ๋  ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด\r\n\t * @param {string} title - ์‹ญ์ž ๋“œ๋ž˜๊ทธ ๋ฐ” ํ—ค๋”์— ๊ฝ‚ํž ํƒ€์ดํ‹€๋ช… (๊ธฐ๋ณธ๊ฐ’: Details)\r\n\t * @returns {Promise} ํŒ์—…์ด ๋‹ซํž ๋•Œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ์˜์ˆ˜์ฆ\r\n\t */\r\n\tpopup = (ContentComponent, param = {}, title = \"Details\") => {\r\n\t\tdocument.querySelectorAll(NinePopup.tagName).forEach(el => el.remove());\r\n\r\n\t\tconst $popupWrapper = document.createElement(NinePopup.tagName);\r\n\t\tdocument.body.appendChild($popupWrapper);\r\n\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst $bodySpace = $popupWrapper.popupBody;\r\n\t\t\tconst $dialogComp = $popupWrapper.dialog;\r\n\r\n\t\t\tif (title && $dialogComp) $dialogComp.setAttribute(\"subject\", title);\r\n\r\n\t\t\tconst root = createRoot($bodySpace);\r\n\r\n\t\t\t// ๐ŸŽฏ ์˜ค์ง ํ•˜๋‚˜, ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ์™„์ „ํžˆ ํŒŒ๊ดด(Closed)๋˜๋Š” ์‹œ์ ๋งŒ ๋”ฑ ๋‚š์•„์ฑ•๋‹ˆ๋‹ค.\r\n\t\t\t$dialogComp?.addEventListener('closed', (e) => {\r\n\t\t\t\tresolve(e.detail); // ์ตœ์ข… ๋ฐ˜ํ™˜๊ฐ’ ๋ถ€๋ชจ์˜ .then()์œผ๋กœ ์ „๋‹ฌ\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\troot.unmount();\r\n\t\t\t\t\t$popupWrapper.remove();\r\n\t\t\t\t}, 0);\r\n\t\t\t});\r\n\r\n\t\t\troot.render(React.createElement(ContentComponent, { data: param }));\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\t$dialogComp?.showModal();\r\n\t\t\t}, 0);\r\n\t\t});\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 2. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๋ฌด๋ ฅํ™”ํ•˜๊ณ  ๊นŠ์ด ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋งŒ๋Šฅ ์ฟผ๋ฆฌ\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” CSS ์„ ํƒ์ž (์˜ˆ: 'input[name]')\r\n\t * @param {HTMLElement|ShadowRoot|Document} root - ํƒ์ƒ‰ ์‹œ์ž‘์ \r\n\t * @returns {HTMLElement[]} ๋งค์นญ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM ์—˜๋ฆฌ๋จผํŠธ ๋ฐฐ์—ด\r\n\t */\r\n\tquerySelectorAll = (selector, root = document) => {\r\n\t\tconst results = [];\r\n\r\n\t\tconst search = (node) => {\r\n\t\t\tif (!node) return;\r\n\r\n\t\t\t// ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ShadowRoot๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ๋‚ด๋ถ€๋ถ€ํ„ฐ ํƒ์ƒ‰\r\n\t\t\tif (node.shadowRoot) {\r\n\t\t\t\tsearch(node.shadowRoot);\r\n\t\t\t}\r\n\r\n\t\t\t// ํ˜„์žฌ ๋ ˆ๋ฒจ(Light DOM ๋˜๋Š” Shadow DOM)์—์„œ ๋งค์นญ๋˜๋Š” ํƒ€๊ฒŸ ์ˆ˜์ง‘\r\n\t\t\tnode.querySelectorAll?.(selector).forEach(elem => {\r\n\t\t\t\tif (!results.includes(elem)) {\r\n\t\t\t\t\tresults.push(elem);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// ์„ฑ๋Šฅ ์ตœ์ ํ™”: querySelectorAll('*') ๋Œ€์‹  ์‹ค์ œ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋“ค๋งŒ ๋ฃจํ”„ ๋Œ๋ฉฐ ์žฌ๊ท€ ํƒ์ƒ‰\r\n\t\t\tconst children = node.children ? Array.from(node.children) : [];\r\n\t\t\tchildren.forEach(child => {\r\n\t\t\t\tsearch(child);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tsearch(root);\r\n\t\treturn results;\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 3. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๋šซ๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋งค์นญ๋˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ (์กฐ๊ธฐ ์ข…๋ฃŒ ์ตœ์ ํ™”)\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” CSS ์„ ํƒ์ž\r\n\t * @param {HTMLElement|ShadowRoot|Document} root - ํƒ์ƒ‰ ์‹œ์ž‘์ \r\n\t * @returns {HTMLElement|null} ๋งค์นญ๋œ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด ๋˜๋Š” null\r\n\t */\r\n\tquerySelector = (selector, root = document) => {\r\n\t\tif (!root) return null;\r\n\r\n\t\t// ํ˜„์žฌ ๋…ธ๋“œ ์ž์ฒด์—์„œ ๋ฐ”๋กœ ๋งค์นญ๋˜๋Š” ๊ฒŒ ์žˆ๋‹ค๋ฉด ์ฆ‰์‹œ ๋ฐ˜ํ™˜\r\n\t\tlet found = root.querySelector?.(selector);\r\n\t\tif (found) return found;\r\n\r\n\t\t// ํ˜„์žฌ ๋…ธ๋“œ์— Shadow DOM ์žฅ๋ฒฝ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๋‚ด๋ถ€๋ฅผ ๋จผ์ € ํƒ์ƒ‰\r\n\t\tif (root.shadowRoot) {\r\n\t\t\tfound = this.querySelector(selector, root.shadowRoot);\r\n\t\t\tif (found) return found;\r\n\t\t}\r\n\r\n\t\t// ์ž์‹ ์š”์†Œ๋“ค์„ ์ˆœํšŒํ•˜๋ฉฐ ๊นŠ์ˆ™์ด ์ˆจ์€ ํƒ€๊ฒŸ ์ถ”์ \r\n\t\tconst children = root.children ? Array.from(root.children) : [];\r\n\t\tfor (const child of children) {\r\n\t\t\tfound = this.querySelector(selector, child);\r\n\t\t\tif (found) return found;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 4. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๊ด€ํ†ตํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋งŒ๋Šฅ ํด๋กœ์ง€์ŠคํŠธ\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ชจ์˜ CSS ์„ ํƒ์ž (์˜ˆ: 'nine-popup')\r\n\t * @param {HTMLElement} startElement - ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๊ธฐ์ค€ ์—˜๋ฆฌ๋จผํŠธ (๋ณดํ†ต e.target)\r\n\t * @returns {HTMLElement|null} ๋งค์นญ๋œ ์กฐ์ƒ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด ๋˜๋Š” null\r\n\t */\r\n\tclosest = (selector, startElement) => {\r\n\t\tif (!startElement || typeof selector !== 'string') return null;\r\n\r\n\t\tlet currentElement = startElement;\r\n\r\n\t\twhile (currentElement) {\r\n\t\t\t// โ‘  ์ผ๋ฐ˜ Element ๋…ธ๋“œ์ผ ๋•Œ๋งŒ matches ๊ฒ€์‚ฌ (ShadowRoot ๋“ฑ ๋ถ„๊ธฐ ๋ฐฉ์–ด)\r\n\t\t\tif (currentElement.nodeType === Node.ELEMENT_NODE) {\r\n\t\t\t\tif (currentElement.matches(selector)) {\r\n\t\t\t\t\treturn currentElement;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// โ‘ก ๐Ÿš€ [ํ•ต์‹ฌ] ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ Shadow DOM ๋‚ด๋ถ€๋ผ๋ฉด getRootNode().host๋ฅผ ํ†ตํ•ด ๋ฐ”๊นฅ ์„ธ์ƒ(Host)์œผ๋กœ ํƒˆ์ถœ!\r\n\t\t\t// ๋งŒ์•ฝ ๋” ์ด์ƒ ์˜ฌ๋ผ๊ฐˆ Host๊ฐ€ ์—†๋‹ค๋ฉด ์ผ๋ฐ˜ ์ƒ์œ„ ๋ถ€๋ชจ(parentElement)๋กœ ์ด๋™\r\n\t\t\tconst rootNode = currentElement.getRootNode?.();\r\n\r\n\t\t\tif (rootNode && rootNode instanceof ShadowRoot) {\r\n\t\t\t\tcurrentElement = rootNode.host; // ์žฅ๋ฒฝ ๋ŒํŒŒ\r\n\t\t\t} else {\r\n\t\t\t\tcurrentElement = currentElement.parentElement || null; // ์ผ๋ฐ˜ ๋ถ€๋ชจ ์ถ”์ \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\n// ๐ŸŽฏ [ํ•ต์‹ฌ] ๊ธ€๋กœ๋ฒŒ `nine` ๊ฐ์ฒด์— ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋“ค์„ ํ†ต์งธ๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.\r\nObject.assign(nine, new NineUtil());","// 1. ๊ธฐ์กด core ๋ชจ๋“ˆ\r\n//import { NineUxUtil } from './ux/dialog/NineUxUtil.js';\r\nimport { nine, subscribeConfig, config } from './core/Config.js';\r\nimport { Trace, trace } from './core/Trace.js';\r\nimport { TaskDebouncer } from './core/TaskDebouncer.js';\r\n\r\n// 2. ์‹ ๊ทœ net ๋ฐ ux ๋ชจ๋“ˆ ์ถ”๊ฐ€\r\nimport { api, Fetch } from './net/Fetch.js';\r\nimport { Loading } from './ux/Loading.js';\r\n\r\nimport { nineDialog } from './ux/dialog/nineDialog.js';\r\nimport { nineConfirmPopup, nineAlertPopup } from './ux/dialog/nineConfirm.js';\r\nimport { ninePromptPopup } from './ux/dialog/ninePrompt.js';\r\n\r\nimport { safe } from \"./utils/promise.js\"; // ๊ฒฝ๋กœ์— ๋งž์ถฐ ์ž„ํฌํŠธ\r\n// ux\r\nimport './ux/UxSplitter.js';\r\nimport './ux/dialog/NineUxUtil.js';\r\nimport './utils/NineUtil.js';\r\nimport './utils/NinePopup.js';\r\n\r\n/**\r\nconst utilInstance = new NineUxUtil();\r\nnine.alert = utilInstance.alert.bind(utilInstance);\r\nnine.confirm = utilInstance.confirm.bind(utilInstance);\r\nnine.prompt = utilInstance.prompt.bind(utilInstance);\r\nnine.formatDate = utilInstance.formatDate.bind(utilInstance);\r\n\t*/\r\n//const utilInstance = new NineUxUtil();\r\n\r\n// ๐Ÿ’ก ์ด๋ฏธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ์ฒด ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•ด์ฃผ๋ฉด ๋๋‚ฉ๋‹ˆ๋‹ค!\r\n//Object.assign(nine, utilInstance);\r\n\r\nnine.safe = safe;\r\n\r\n// ๊ธฐ์กด nine ๊ฐ์ฒด(Config)์™€ Util ๊ธฐ๋Šฅ์„ ํ•ฉ์„ฑ\r\n//Object.assign(nine, utilInstance);\r\n\r\nnine.api = api;\r\nnine.trace = trace;\r\nnine.subscribeConfig = subscribeConfig;\r\nnine.config = config || {};\r\n\r\nexport {\r\n\tnine,\r\n\tsubscribeConfig,\r\n\tconfig,\r\n\tTrace,\r\n\ttrace,\r\n\tTaskDebouncer,\r\n\tapi, // ๐Ÿš€ ์ถ”๊ฐ€: ์ด์ œ ์„œ๋น„์Šค์—์„œ api.get() ๊ฐ€๋Šฅ\r\n\tFetch, // ๐Ÿš€ ์ถ”๊ฐ€: ํด๋ž˜์Šค ์ž์ฒด๋„ ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ ๋…ธ์ถœ\r\n\tLoading as loading, // ๐Ÿš€ ์ถ”๊ฐ€: loading.show() ๋กœ ์“ฐ๊ธฐ ํŽธํ•˜๊ฒŒ alias\r\n\tnineDialog,\r\n\tnineAlertPopup, nineConfirmPopup, ninePromptPopup\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.nine = nine;\r\n}\r\n"],"names":["nine","trace","Trace","traceOrigin","_a","config","el","_init","this","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","x_google_ignoreList":[13]}
1
+ {"version":3,"file":"nine-util.js","sources":["../src/core/Config.js","../src/core/Trace.js","../src/core/TaskDebouncer.js","../src/external/NoPeer.js","../src/ux/Loading.js","../src/net/Fetch.js","../src/ux/dialog/style.dialog.js","../src/ux/dialog/nineDialog.js","../src/ux/dialog/nineConfirm.js","../src/ux/dialog/ninePrompt.js","../src/utils/promise.js","../src/ux/dialog/NineUxUtil.js","../src/ux/UxSplitter.js","../node_modules/dayjs/dayjs.min.js","../src/utils/NinePopup.js","../src/utils/NineUtil.js","../src/index.js"],"sourcesContent":["const listeners = new Set();\r\n\r\n// ๐Ÿ’ก [ํ•ต์‹ฌ] ์ „์—ญ ์ €์žฅ์†Œ๋ฅผ ๋‹จ์ผํ™”ํ•ฉ๋‹ˆ๋‹ค.\r\n// window์— ์ด๋ฏธ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์“ฐ๊ณ , ์—†์œผ๋ฉด ์ดˆ๊ธฐ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.\r\nconst _initialConfig = {\r\n\tux: { nativeOverride: false, theme: 'light' },\r\n\tboard: { readOnly: false },\r\n\tcssPath: \"\",\r\n\tdebug: false\r\n};\r\n\r\nif (typeof window !== 'undefined' && !window.__NINE_GLOBAL_CONFIG__) {\r\n\twindow.__NINE_GLOBAL_CONFIG__ = _initialConfig;\r\n}\r\n\r\n// ์ด์ œ ๋ชจ๋“  ๋ชจ๋“ˆ์˜ _config๋Š” ๋™์ผํ•œ window ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.\r\nconst _config = typeof window !== 'undefined' ? window.__NINE_GLOBAL_CONFIG__ : _initialConfig;\r\n\r\nexport const subscribeConfig = (fn) => {\r\n\tlisteners.add(fn);\r\n\tfn('all', _config);\r\n\treturn () => listeners.delete(fn);\r\n};\r\n\r\n// Proxy ์—ญ์‹œ ์ „์—ญ ์ €์žฅ์†Œ์ธ _config๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.\r\nexport const config = new Proxy(_config, {\r\n\tset(target, prop, value) {\r\n\t\ttarget[prop] = value;\r\n\t\tlisteners.forEach(fn => fn(prop, target));\r\n\t\treturn true;\r\n\t},\r\n\tget(target, prop) {\r\n\t\treturn target[prop];\r\n\t}\r\n});\r\n\r\nexport const nine = {\r\n\tconfig: config,\r\n\r\n\t// Getter์—์„œ window.nine๊นŒ์ง€ ํ™•์ธํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.\r\n\t// ์ด๋ฏธ config ์ž์ฒด๊ฐ€ ์ „์—ญ ์ €์žฅ์†Œ(__NINE_GLOBAL_CONFIG__)๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.\r\n\tget cssPath() {\r\n\t\treturn this.config.cssPath || \"\";\r\n\t},\r\n\r\n\tsetup(options = {}) {\r\n\t\tObject.entries(options).forEach(([key, value]) => {\r\n\t\t\t// ๊นŠ์€ ๋ณ‘ํ•ฉ ์ง€์›\r\n\t\t\tif (typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n\t\t\t\tthis.config[key] = { ...this.config[key], ...value };\r\n\t\t\t} else {\r\n\t\t\t\tthis.config[key] = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ window.nine์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅ\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\twindow.nine = window.nine || this;\r\n\t\t}\r\n\t}\r\n};","//import { nine } from '@nine-lab/nine-util';\r\n\r\nexport class Trace {\r\n\t#name;\r\n\t#color;\r\n\r\n\tconstructor(name = null, color = \"green\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\tinit(name, color = \"green\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊ทธ ํ™œ์„ฑํ™” ๋ฐ ํ•„ํ„ฐ ํƒ€๊ฒŸ ์—ฌ๋ถ€ ์ฒดํฌ ํ—ฌํผ\r\n\t */\r\n\t#isTraceEnabled() {\r\n\t\t// 1. ์ตœ์ƒ๋‹จ main.jsx์—์„œ nine.setup() ์„ธํŒ…์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ\r\n\t\tif (nine && nine.config && nine.config.debug) {\r\n\t\t\tconst debugConfig = nine.config.debug;\r\n\r\n\t\t\t// ๐Ÿšจ ๋””๋ฒ„๊ทธ ๋งˆ์Šคํ„ฐ ์Šค์œ„์น˜๊ฐ€ ๊บผ์ ธ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ์ถœ๋ ฅ ์•ˆ ํ•จ\r\n\t\t\tif (debugConfig.enable === false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// ๐ŸŽฏ [ํ•„ํ„ฐ ์ฒดํฌ ์ถ”๊ฐ€] ๋””๋ฒ„๊ทธ๊ฐ€ ์ผœ์ ธ์žˆ๊ณ , ํ•„ํ„ฐ(filter) ๋ฐฐ์—ด ๋ช…๋‹จ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ\r\n\t\t\tif (debugConfig.enable === true && Array.isArray(debugConfig.filter)) {\r\n\t\t\t\t// ์ด๋ฆ„์ด ์ง€์ • ์•ˆ ๋œ ์ˆœ์ • trace.log๋Š” ํ†ต๊ณผ, ์ด๋ฆ„์ด ์žˆ๋‹ค๋ฉด ํ•„ํ„ฐ ๋ช…๋‹จ์— ์žˆ์–ด์•ผ๋งŒ ํ†ต๊ณผ!\r\n\t\t\t\tif (this.#name) {\r\n\t\t\t\t\treturn debugConfig.filter.includes(this.#name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn debugConfig.enable;\r\n\t\t}\r\n\r\n\t\t// 2. [Fallback] ๋งŒ์•ฝ nine ์…‹์—… ์ „์— ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ์„ธํŒ…์ด ์—†๋‹ค๋ฉด ๊ธฐ์กด ๋กœ์ปฌ ์ฃผ์†Œ ์—ฌ๋ถ€๋กœ ํŒ๋‹จ\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\treturn window.location.hostname === 'localhost' ||\r\n\t\t\t\twindow.location.hostname === '127.0.0.1' ||\r\n\t\t\t\twindow.location.hostname.startsWith('192.168.');\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// ๐Ÿ”ด ํ•ต์‹ฌ: ์†Œ์Šค ์œ„์น˜ ์œ ์ง€๋ฅผ ์œ„ํ•œ Getter ๋กœ์ง\r\n\tget log() {\r\n\t\tif (!this.#isTraceEnabled()) return () => {};\r\n\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\t\treturn (this.#name)\r\n\t\t\t? console.log.bind(console, `%c[${this.#name}]`, style)\r\n\t\t\t: console.log.bind(console);\r\n\t}\r\n\r\n\tget warn() {\r\n\t\tif (!this.#isTraceEnabled()) return () => {};\r\n\t\treturn (this.#name)\r\n\t\t\t? console.warn.bind(console, `%c[${this.#name}]`, \"color: cyan; font-weight: bold;\")\r\n\t\t\t: console.warn.bind(console);\r\n\t}\r\n\r\n\tget error() {\r\n\t\t// ์‹œ์Šคํ…œ ์น˜๋ช…์  ์žฅ์•  ์—๋Ÿฌ๋Š” ๋””๋ฒ„๊ทธ ๋ชจ๋“œ/ํ•„ํ„ฐ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์‹ค์ œ ์žฅ์•  ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.\r\n\t\treturn (this.#name)\r\n\t\t\t? console.error.bind(console, `%c[${this.#name}]`, \"color: red; font-weight: bold;\")\r\n\t\t\t: console.error.bind(console);\r\n\t}\r\n}\r\n\r\nexport const trace = new Trace();\r\nif (typeof window !== 'undefined') window.trace = trace;","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => this.#flush(), this.#delay);\r\n\t}\r\n\r\n\texecWithKey(key, func, ...args) {\r\n\t\t// 1. ๊ฐ™์€ ํ‚ค(์˜ˆ: 'resize')๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ด์ „ ํ์—์„œ ํ•ด๋‹น ํ‚ค ์‚ญ์ œ (์ค‘๋ณต ์ œ๊ฑฐ)\r\n\t\tthis.#queue = this.#queue.filter(task => task.key !== key);\r\n\r\n\t\t// 2. ์ƒˆ๋กœ์šด ํƒœ์Šคํฌ ์ถ”๊ฐ€\r\n\t\tthis.#queue.push({ key, func, args });\r\n\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\t\tthis.#timer = setTimeout(() => this.#flush(), this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}","import { trace as traceOrigin } from '../core/Trace.js';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-util\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class Loading {\n\tstatic show() {\n\t\tlet overlay = document.getElementById(\"global-loading-overlay\");\n\t\tif (!overlay) {\n\t\t\toverlay = document.createElement(\"div\");\n\t\t\toverlay.id = \"global-loading-overlay\";\n\t\t\toverlay.style.cssText = `\n position: fixed; inset: 0; z-index: 9999;\n background: rgba(0, 0, 0, 0.4); display: flex; \n justify-content: center; align-items: center;\n backdrop-filter: blur(2px);\n `;\n\t\t\toverlay.innerHTML = `<div class=\"loading-spinner\"></div>`;\n\t\t\tdocument.body.appendChild(overlay);\n\n\t\t\tif (!document.getElementById(\"nine-util-style\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"nine-util-style\";\n\t\t\t\tstyle.innerHTML = `\n .loading-spinner {\n width: 48px; height: 48px;\n border: 5px solid rgba(255, 255, 255, 0.3);\n border-top-color: white; border-radius: 50%;\n animation: nine-spin 1s linear infinite;\n }\n @keyframes nine-spin { to { transform: rotate(360deg); } }\n `;\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\t\t}\n\t\toverlay.style.display = \"flex\";\n\t}\n\n\tstatic hide() {\n\t\tconst overlay = document.getElementById(\"global-loading-overlay\");\n\t\tif (overlay) overlay.style.display = \"none\";\n\t}\n}","import { trace } from \"@nopeer\";\nimport { Loading } from \"../ux/Loading.js\";\n\nexport class Fetch {\n\tstatic BASE_URL = window.__API_BASE_URL__ || \"\";\n\n\tstatic #request = (method, url, data = {}, showLoading = true) => {\n\t\tconst finalUrl = url.startsWith('http') ? url : `${this.BASE_URL}${url}`;\n\n\t\tif (showLoading) {\n\t\t\tLoading.show();\n\t\t}\n\n\t\t// 1. ๊ธฐ๋ณธ ํ—ค๋” ์„ค์ •\n\t\tconst headers = {};\n\n\t\t// ๐Ÿ”ด ํ•ต์‹ฌ: ๋ฐ์ดํ„ฐ๊ฐ€ FormData๊ฐ€ ์•„๋‹ ๋•Œ๋งŒ JSON ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.\n\t\tif (!(data instanceof FormData)) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tconst options = {\n\t\t\tmethod,\n\t\t\theaders\n\t\t};\n\n\t\tlet targetUrl = finalUrl;\n\t\tif (method === \"GET\") {\n\t\t\ttargetUrl += `?${new URLSearchParams(data)}`;\n\t\t} else {\n\t\t\t// ๐Ÿ”ด ํ•ต์‹ฌ: FormData๋Š” ๊ทธ๋Œ€๋กœ body์— ๋„ฃ๊ณ , ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” JSON.stringify ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n\t\t\toptions.body = data instanceof FormData ? data : JSON.stringify(data);\n\t\t}\n\n\t\treturn fetch(targetUrl, options)\n\t\t\t.then(async res => {\n\t\t\t\tif (!res.ok) {\n\t\t\t\t\tconst text = await res.text();\n\t\t\t\t\tthrow new Error(`API ์˜ค๋ฅ˜ (${res.status}): ${text}`);\n\t\t\t\t}\n\t\t\t\treturn res.json();\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\ttrace.error(`[IdeFetch.${method.toLowerCase()}] ${finalUrl} ์‹คํŒจ:`, err);\n\t\t\t\tthrow err;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (showLoading) {\n\t\t\t\t\tLoading.hide();\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\t// ๊ธฐ์กด post/get ๋ฉ”์„œ๋“œ๋„ ์ธ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ๋„๋ก ์ˆ˜์ •\n\tstatic get = (url, data = {}, showLoading = true) => this.#request(\"GET\", url, data, showLoading);\n\tstatic post = (url, data = {}, showLoading = true) => this.#request(\"POST\", url, data, showLoading);\n\n\t/**\n\t * ๐Ÿš€ ๋ฒ”์šฉ ์ฒญํฌ ์ „์†ก (ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊นŒ์ง€ ๋™์  ์„ค์ •)\n\t * @param {string} url - API ์ฃผ์†Œ\n\t * @param {Array} rows - ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด\n\t * @param {object} options - ์ƒ์„ธ ์˜ต์…˜\n\t * - fileKey: ๊ฐ์ฒด ๋‚ด ํŒŒ์ผ ์†์„ฑ๋ช… (๊ธฐ๋ณธ: 'fileContents')\n\t * - filePartName: ์„œ๋ฒ„์—์„œ ๋ฐ›์„ ํŒŒ์ผ ํŒŒํŠธ๋ช… (๊ธฐ๋ณธ: 'files')\n\t * - jsonPartName: ์„œ๋ฒ„์—์„œ ๋ฐ›์„ JSON ํŒŒํŠธ๋ช… (๊ธฐ๋ณธ: 'dataList')\n\t * - chunkSize: ๋ถ„ํ•  ๋‹จ์œ„ (๊ธฐ๋ณธ: 10)\n\t */\n\tstatic postMultipart = async (url, rows = [], options = {}) => {\n\t\tconst {\n\t\t\tfileKey = 'fileContents',\n\t\t\tfilePartName = 'files',\n\t\t\tjsonPartName = 'dataList',\n\t\t\tchunkSize = 10\n\t\t} = options;\n\n\t\tconst dataRows = Array.isArray(rows) ? rows : [rows];\n\n\t\tLoading.show();\n\t\tlet totalCount = 0;\n\t\tlet lastResponse = null;\n\n\t\treturn (async () => {\n\n\t\t\tlet globalFileIndex = 0;\n\n\t\t\tfor (let i = 0; i < dataRows.length; i += chunkSize) {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tconst chunk = dataRows.slice(i, i + chunkSize);\n\t\t\t\tconst rowDataList = [];\n\n\t\t\t\tchunk.forEach((row, rowIndex) => {\n\t\t\t\t\t// row์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ์™€ ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ\n\t\t\t\t\tconst { [fileKey]: fileData, ...rest } = row;\n\t\t\t\t\trowDataList.push(rest);\n\n\t\t\t\t\t// 2๋ฒˆ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ: ๋ฐฐ์—ด์ด๋“  ์•„๋‹ˆ๋“  ๋ช…ํ™•ํžˆ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ด\n\t\t\t\t\tconst files = Array.isArray(fileData) ? fileData : [fileData];\n\n\t\t\t\t\tconst fileIndices = [];\n\t\t\t\t\tfiles.forEach(fileObj => {\n\t\t\t\t\t\tif (fileObj instanceof File) {\n\t\t\t\t\t\t\tformData.append(filePartName, fileObj);\n\t\t\t\t\t\t\tfileIndices.push(globalFileIndex++);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\trowDataList.push({ ...rest, fileIndices });\n\t\t\t\t});\n\n\t\t\t\t// JSON ๋ฐ์ดํ„ฐ๋ฅผ FormData์— ์ถ”๊ฐ€\n\t\t\t\t//const jsonBlob = new Blob([JSON.stringify(rowDataList)], { type: 'application/json' });\n\t\t\t\tconst jsonBlob = new Blob(\n\t\t\t\t\t[JSON.stringify(Array.isArray(rows) ? rowDataList : rowDataList[0])],\n\t\t\t\t\t{ type: 'application/json' }\n\t\t\t\t);\n\t\t\t\tformData.append(jsonPartName, jsonBlob);\n\n\t\t\t\tlastResponse = await this.post(url, formData, false);\n\n\t\t\t\tif (lastResponse && (lastResponse.success || lastResponse.status === 'OK')) {\n\t\t\t\t\ttotalCount += chunk.length;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`์ฒญํฌ ์ „์†ก ์‹คํŒจ: ${i}๋ฒˆ์งธ ์„น์…˜`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...lastResponse, success: true, totalCount };\n\t\t})()\n\t\t\t.finally(() => Loading.hide());\n\t};\n\n\tstatic postMultipart_BAK = async (url, rows = [], options = {}) => {\n\t\tconst {\n\t\t\tfileKey = 'fileContents',\n\t\t\tfilePartName = 'files',\n\t\t\tjsonPartName = 'dataList',\n\t\t\tchunkSize = 10\n\t\t} = options;\n\n\t\t// 1. ์‹œ์ž‘ ์ „ ๋กœ๋”ฉ๋ฐ” ๋„์šฐ๊ธฐ\n\t\tLoading.show();\n\n\t\tlet totalCount = 0;\n\t\tlet lastResponse = null;\n\n\t\t// ๐Ÿ”ด 2. ์ „์ฒด ๋ฃจํ”„๋ฅผ Promise ์ฒด์ธ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ (๋‚ด๋ถ€๋Š” await ์œ ์ง€)\n\t\treturn (async () => {\n\t\t\tfor (let i = 0; i < rows.length; i += chunkSize) {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tconst chunk = rows.slice(i, i + chunkSize);\n\t\t\t\tconst rowDataList = [];\n\n\t\t\t\tchunk.forEach((row) => {\n\t\t\t\t\tconst { [fileKey]: fileObj, _fileObj, ...rest } = row;\n\t\t\t\t\trowDataList.push(rest);\n\t\t\t\t\tif (fileObj instanceof File) {\n\t\t\t\t\t\tformData.append(filePartName, fileObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tconst jsonBlob = new Blob([JSON.stringify(rowDataList)], { type: 'application/json' });\n\t\t\t\tformData.append(jsonPartName, jsonBlob);\n\n\t\t\t\t// showLoading = false๋กœ ๋‚ด๋ถ€ ํ˜ธ์ถœ\n\t\t\t\tlastResponse = await this.post(url, formData, false);\n\n\t\t\t\tif (lastResponse && (lastResponse.success || lastResponse.status === 'OK')) {\n\t\t\t\t\ttotalCount += chunk.length;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`์ฒญํฌ ์ „์†ก ์‹คํŒจ: ${i}๋ฒˆ์งธ ์„น์…˜`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ...lastResponse, success: true, totalCount };\n\t\t})()\n\t\t\t.catch(err => {\n\t\t\t\ttrace.error(\"[postChunk] Error:\", err);\n\t\t\t\tthrow err;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// ๐Ÿ”ด 3. ์„ฑ๊ณตํ•˜๋“  ์‹คํŒจํ•˜๋“  ์—ฌ๊ธฐ์„œ ๊น”๋”ํ•˜๊ฒŒ ๋‹ซ๊ธฐ!\n\t\t\t\tLoading.hide();\n\t\t\t});\n\t};\n}\n\nexport const api = Fetch;","// nxDialog.styles.js\nexport const dialogStyles = `\n\tdialog::backdrop {\n\t\tbackground: rgba(0, 0, 0, 0.3);\n\t}\n\t\n\tdialog:modal {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding: 0;\n\t\toverflow: hidden;\n\t\tborder: 1px solid darkgreen;\n\t\toutline: none;\n\t\tresize: both;\n\t\tbox-shadow: 0 0 4px 0 darkgreen;\n width: 500px;\n height: fit-content;\n min-width: 330px;\n min-height: 60px;\n max-height: 100%;\n }\n \n \n \n \n\tdiv.head .rect1, div.head .rect2, div.head .rect3 {\n\t\tdisplay: none;\n\t\twidth: 50px;\n\t\theight: 100%;\n\t}\n\tdiv.head .rect1 {\n\t\tbackground-color: red;\n\t}\n\tdiv.head .rect2 {\n\t\tbackground-color: darkgreen;\n\t}\n\tdiv.head .rect3 {\n\t\tbackground-color: olive;\n\t}\n\t\n\tdiv.head {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t--height: 30px;\n\t\tbackground-color: darkgreen;\n\t\tpadding: 4px;\n\t\tcursor: move;\n\t}\n\tdiv.head:hover {\n\t\tfilter: brightness(110%);\n\t}\n\t\n\tdiv.head span {\n\t\tfont-size: 12px;\n\t\tposition: relative;\n\t}\n\t\n\tdiv.head span.title {\n\t\tcolor: #ddd;\n\t\tmargin-left: 4px;\n\t\tfont-weight: bold;\n\t}\n\t\n\tdiv.head span.sub-title {\n\t\tcolor: #ccc;\n\t\tmargin-left: 8px;\n\t\tfont-style: italic;\n\t}\n\t\n\tdiv.head form {\n\t\tmargin: 0;\n\t}\n\tdiv.head button {\n\t\tmargin-right: 4px;\n\t\tbackground-color: transparent;\n\t\tborder: none;\n\t\tcolor: #ccc;\n\t\tfont-size: x-small;\n\t}\n\tdiv.head button:hover {\n\t\tcursor: pointer;\n\t}\n\t\n\tdiv.contents {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t\tbackground-color: white;\n\t\tcolor: #333;\n\t}\n\tdiv.left {\n\t\tposition: relative;\n\t\twidth: 16px;\n\t\theight: 100%;\n\t\tbackground-color: #ddd;\n\t\tdisplay: none;\n\t}\n\t\n\tdiv.left span {\n\t\twriting-mode: vertical-rl;\n\t\t-moz-user-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t\tuser-select: none;\n\t\tcolor: #ccc;\n\t\tfont-weight: 700;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin-left: 3px;\n\t\tmargin-top: 3px;\n\t}\n\tdiv.close2 {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 3px;\n\t\tcursor: pointer;\n\t\tcolor: #666;\n\t}\n\tdiv.close2 svg:hover {\n\t\tcolor: #999;\n\t}\n\t\n\tdiv.body {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: unset;\n\t\t--border: 3px solid #999;\n\t\t--border-top: none;\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\t\tpadding: 10px;\n\t\tgap: 8px;\n\t\tflex-direction: column;\n\t}\n\t\n\t\n\t\n\t\n\tng-sphere.icon {\n\t\tmargin-left: 8px;\n\t}\n\t\n\t.buttons {\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\tright: 4px;\n\t}\n\t\n\tng-sphere {\n\t\tposition: relative;\n\t\t--width: 16px;\n\t\t--height: 16px;\n\t\tcursor: pointer;\n\t\tmargin-right: 4px;\n\t\tdisplay: flex;\n\t}\n\tng-sphere:hover {\n\t\tfilter: brightness(90%);\n\t}\n\tng-sphere:active {\n\t\tfilter: brightness(80%);\n\t}\n\t\n\tng-sphere:hover::after {\n\t\tcontent: \"\";\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t}\n\tng-sphere.apply:hover::after {\n\t\tbackground-size: 14px 14px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"2.5,7 6,10 11,3\" style=\"fill:none;stroke:white;stroke-width:2px;\" /></svg>');\n\t}\n\t\n\tng-sphere.reset:hover::after {\n\t\tbackground-size: 12px 12px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" style=\"fill:none;stroke:white;stroke-width:2px;\" focusable=\"false\" aria-hidden=\"true\"><path d=\"M10 5h5V0\"></path><path d=\"M15 8a6.957 6.957 0 0 1-7 7 6.957 6.957 0 0 1-7-7 6.957 6.957 0 0 1 7-7 6.87 6.87 0 0 1 6.3 4\"></path></svg>');\n\t}\n\t\n\tng-sphere.close:hover::after {\n\t\tbackground-size: 12px 12px;\n\t\tbackground-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"fill:none;stroke:white;stroke-width:2px;\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 16 16\"><path d=\"M2 2l12 12M14 2L2 14\"></path></svg>');\n\t}\n\t\n\t\n\tbutton {\n cursor: pointer;\n }\n \n .input-area {\n position: relative;\n height: 100%;\n --display: flex;\n textarea {\n width: 100%;\n height: 100%;\n min-height: 100px;\n padding: 8px;\n box-sizing: border-box;\n resize: none;\n border-radius: 2px;\n border-color: #ccc;\n }\n textarea:focus {\n border-color: green;\n outline: none; /* ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ํŒŒ๋ž€์ƒ‰ ํ…Œ๋‘๋ฆฌ ์ œ๊ฑฐ */\n }\n }\n \n .buttons-confirm {\n position: absolute;\n display: flex;\n justify-content: flex-end;\n bottom: 8px;\n right: 8px;\n }\n \n \n .buttons-confirm button {\n height: 32px;\n margin-right: 8px;\n border: none;\n outline: none;\n width: 60px;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .buttons-confirm button:hover {\n filter: brightness(90%);\n }\n .buttons-confirm button:active {\n color: #ccc;\n }\n \n button.ok {\n --display: none;\n background-color: darkgreen;\n color: white;\n }\n button.cancel {\n color: white;\n background-color: #6c757d;\n }\n \n \n \n div.msg {\n position: relative;\n height: 100%;\n font-size: 14px;\n color: #333;\n padding-bottom: 48px;\n }\n \n .reset, .apply {\n display: none;\n }\n \n \n \n :host(.classic) dialog:modal {\n border: 1px solid #007bff;\n box-shadow: 0 0 4px 0 #007bff;\n }\n \n :host(.classic) div.head {\n background-color: #007bff;\n }\n :host(.classic) div.head:hover {\n filter: brightness(110%);\n }\n \n :host(.classic) div.head span {\n font-size: 12px;\n }\n \n :host(.classic) div.head span.title {\n color: #ddd;\n margin-left: 4px;\n font-weight: bold;\n }\n \n :host(.classic) div.head span.sub-title {\n color: #ccc;\n margin-left: 8px;\n font-style: italic;\n }\n :host(.classic) div.head button {\n margin-right: 4px;\n background-color: transparent;\n border: none;\n color: #ccc;\n font-size: x-small;\n }\n \n \n \n \n :host(.rgb) dialog:modal {\n border: none;\n box-shadow: unset;\n border-top: none;\n }\n \n :host(.rgb) div.left {\n display: block;\n background-color: #ddd;\n }\n :host(.rgb) div.left span {\n color: #ccc;\n }\n :host(.rgb) div.close2 {\n display: block;\n color: #666;\n }\n :host(.rgb) div.close2 svg:hover {\n color: #999;\n }\n :host(.rgb) div.head {\n height: 4px;\n background-color: #999;\n padding: 0;\n }\n :host(.rgb) div.contents {\n height: calc(100% - 4px);\n }\n \n :host(.rgb) div.head ng-sphere,\n :host(.rgb) div.head span,\n :host(.rgb) div.head .buttons {\n display: none;\n }\n \n :host(.rgb) div.head .rect1,\n :host(.rgb) div.head .rect2,\n :host(.rgb) div.head .rect3 {\n display: flex;\n }\n \n \n :host(.rgb) div.head:hover {\n filter: unset;\n }\n \n \n /* --- Animation Core --- */\n:host {\n --nx-duration: 0.4s;\n --nx-timing: cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n/* ๐ŸŽฏ ์ˆ˜์ •: ์• ๋‹ˆ๋ฉ”์ด์…˜ ํด๋ž˜์Šค๊ฐ€ ๋ถ™์€ ๊ฒฝ์šฐ์—๋งŒ ์ดˆ๊ธฐ opacity๋ฅผ 0์œผ๋กœ ์„ค์ • */\n:host(.fade) dialog,\n:host(.zoom) dialog,\n:host(.moveUp) dialog,\n:host(.moveDown) dialog,\n:host(.moveLeft) dialog,\n:host(.moveRight) dialog,\n:host(.roadRunner) dialog {\n opacity: 0;\n}\n\n/* shake๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚ด๋ถ€์—์„œ opacity๋ฅผ ๋‹ค๋ฃจ๋ฏ€๋กœ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ์ฒ˜๋ฆฌ */\n:host(.shake) dialog { \n opacity: 1; \n}\n\n/* 1. Fade (์„œ์„œํžˆ ๋‚˜ํƒ€๋‚จ) */\n:host(.fade) dialog { animation: nx-fade-in var(--nx-duration) forwards; }\n@keyframes nx-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n/* 2. Zoom (์ปค์ง€๋ฉฐ ๋‚˜ํƒ€๋‚จ) */\n:host(.zoom) dialog { animation: nx-zoom-in var(--nx-duration) var(--nx-timing) forwards; }\n@keyframes nx-zoom-in { from { opacity: 0; transform: scale(0.5); } to { opacity: 1; transform: scale(1); } }\n\n/* 3. Slide (์ƒํ•˜์ขŒ์šฐ) */\n:host(.moveUp) dialog { animation: nx-move-up var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveDown) dialog { animation: nx-move-down var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveLeft) dialog { animation: nx-move-left var(--nx-duration) var(--nx-timing) forwards; }\n:host(.moveRight) dialog { animation: nx-move-right var(--nx-duration) var(--nx-timing) forwards; }\n\n@keyframes nx-move-up { from { opacity: 0; transform: translateY(100px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes nx-move-down { from { opacity: 0; transform: translateY(-100px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes nx-move-left { from { opacity: 0; transform: translateX(100px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes nx-move-right { from { opacity: 0; transform: translateX(-100px); } to { opacity: 1; transform: translateY(0); } }\n\n/* 4. Shake (์ƒํ•˜์ขŒ์šฐ ๊ฒฉ๋ ฌํ•œ ์ง„๋™ - ์—๋Ÿฌ ์ธ์ง€์šฉ) */\n:host(.shake) dialog { \n animation: nx-heavy-shake 0.5s cubic-bezier(.36,.07,.19,.97) both;\n opacity: 1; \n}\n\n@keyframes nx-heavy-shake {\n 10%, 90% { transform: translate3d(-1px, -2px, 0); }\n 20%, 80% { transform: translate3d(2px, 4px, 0); }\n 30%, 50%, 70% { transform: translate3d(-6px, -6px, 0); }\n 40%, 60% { transform: translate3d(6px, 6px, 0); }\n}\n\n/* 5. Road Runner (๋“ฑ์žฅ: ์™ผ์ชฝ์—์„œ ํƒ„๋ ฅ ์žˆ๊ฒŒ / ํ‡ด์žฅ: ์›€์ธ ๋ ธ๋‹ค๊ฐ€ ๊ด‘์† ํƒˆ์ถœ) */\n:host(.roadRunner) dialog { \n animation: roadRunnerIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; \n}\n\n@keyframes roadRunnerIn {\n 0% { transform: translateX(-1500px) skewX(30deg); opacity: 1; }\n 70% { transform: translateX(30px) skewX(-10deg); opacity: 1; }\n 100% { transform: translateX(0) skewX(0deg); opacity: 1; }\n}\n\n/* --- Out Animations (๋‹ซํž ๋•Œ) --- */\ndialog.out { pointer-events: none; }\n\n/* Road Runner ํ‡ด์žฅ: ์Šฅ ์›€์ธ ๋ ธ๋‹ค๊ฐ€(Anticipation) ์Œฉ~! */\n:host(.roadRunner) dialog.out { \n animation: roadRunnerOut 0.5s cubic-bezier(0.6, -0.28, 0.735, 0.045) forwards; \n}\n\n@keyframes roadRunnerOut {\n 0% { \n transform: translateX(0) scale(1) skewX(0deg); \n opacity: 1; \n }\n 30% { \n /* ์˜ˆ๋น„ ๋™์ž‘: ๋’ค๋กœ ์‚ด์ง ๊ฐ”๋‹ค๊ฐ€ ์›€์ธ ๋Ÿฌ๋“ค๊ธฐ */\n transform: translateX(50px) scaleX(1.2) scaleY(0.8) skewX(-20deg); \n opacity: 1; \n }\n 100% { \n /* ๋ฐœ์‚ฌ: ๊ธธ๊ฒŒ ๋Š˜์–ด๋‚˜๋ฉฐ ๊ด‘์† ํƒˆ์ถœ */\n transform: translateX(2000px) scaleX(4) scaleY(0.3) skewX(50deg); \n opacity: 0; \n filter: blur(10px); /* ๐Ÿ‘ˆ ์ž”์ƒ ๋А๋‚Œ ์ถ”๊ฐ€ */\n }\n}\n\n/* ์ผ๋ฐ˜ ํ‡ด์žฅ (๊ธฐ๋ณธ) */\ndialog.out { animation: nx-fade-out 0.3s forwards; }\n@keyframes nx-fade-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.9); } }\n`;","import { dialogStyles } from './style.dialog.js';\nimport { trace } from '@nopeer';\n\nexport class nineDialog extends HTMLElement\n{\n\t#shift;\n\t#dialog;\n\n\tconstructor () {\n\t\tsuper();\n\t}\n\n\tconnectedCallback() {\n\n\t\tconst v = this.innerHTML;\n\t\tconst titleText = this.getAttribute(\"subject\") || \"Details\";\n\n\t\ttrace.log(dialogStyles);\n\n\t\tthis.innerHTML = `\n\t\t\t<style>${dialogStyles}</style>\n\t\t\n\t\t\t<dialog>\n\t\t\t\t<div class=\"head\">\n\t\t\t\t\t<div class=\"rect1\"></div>\n\t\t\t\t\t<div class=\"rect2\"></div>\n\t\t\t\t\t<div class=\"rect3\"></div>\n\t\t\t\t\t<ng-sphere class=\"icon\" end-fill=\"#666\" size=\"8\"></ng-sphere>\n\t\t\t\t\t<span class=\"title\">${titleText}</span>\n\t\t\t\t\t<span class=\"sub-title\"></span>\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<ng-sphere class=\"apply\" start-fill=\"#cc6\" end-fill=\"#660\" size=\"16\" title=\"apply\"></ng-sphere>\n\t\t\t\t\t\t<ng-sphere class=\"reset\" start-fill=\"#99f\" end-fill=\"#00f\" size=\"16\" title=\"reset\"></ng-sphere>\n\t\t\t\t\t\t<ng-sphere class=\"close\" start-fill=\"#f99\" end-fill=\"#f00\" size=\"16\" title=\"close\"></ng-sphere>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"contents\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<span>๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ๋ฐ”์‚ฌ์•„์ž์ฐจ์นดํƒ€ํŒŒํ•˜</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"body\">\n\t\t\t\t\t\t${v}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"close2\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</dialog>\n\t\t`;\n\n\t\t//this.#owner = this.getRootNode().host.closest(\"nine-grid\");\n\n\t\t//$(\".title\", this).html(\"Details\");\n\n\t\tthis.#dialog = this.querySelector('dialog');\n\t\tthis.#init();\n\t};\n\n\tshowModal = () => {\n\t\tthis.#dialog.showModal();\n\n\t\t(this.shadowRoot?.activeElement || document.activeElement)?.blur();\n\t};\n\n\tclose = () => {\n\t\t// ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ (ํ‘œ์ค€ ๋ฐฉ์‹์€ ํ•ธ๋“ค๋Ÿฌ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ,\n\t\t// ์—ฌ๊ธฐ์„œ๋Š” ์š”์†Œ๊ฐ€ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ •๋ฆฌ)\n\t\tthis.#dialog.close();\n\t\tthis.remove();\n\t};\n\n\t#init = () => {\n\t\tconst head = this.querySelector('.head');\n\n\t\tif (head) {\n\t\t\thead.addEventListener('mousedown', this.#onMouseDown);\n\t\t\thead.addEventListener('touchstart', this.#onTouchStart);\n\n\t\t\t// ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋“œ๋ž˜๊ทธ ๊ฐ€๋Šฅ ์•„์ด์ฝ˜(์ด๋™ ์‹ญ์ž๊ฐ€) ๋ชจ์–‘์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ UX ๊ฐœ์„ \n\t\t\t//head.style.cursor = 'move';\n\t\t}\n\n\t\t// 1. ๋ชจ๋“  ๋‹ซ๊ธฐ ์„ฑ๊ฒฉ์˜ ๋ฒ„ํŠผ (.close, .close2, .cancel) ๊ณตํ†ต ์ฒ˜๋ฆฌ\n\t\tthis.querySelectorAll('.close, .close2, .cancel').forEach(btn => {\n\t\t\tbtn.onclick = () => this.closeWithAnimation(null); // ์ทจ์†Œ/๋‹ซ๊ธฐ๋Š” null ๋ฆฌํ„ด\n\t\t});\n\n\t\t// 2. ํ™•์ธ ๋ฒ„ํŠผ (.ok) ์ฒ˜๋ฆฌ\n\t\t// ํ™•์ธ ๋ฒ„ํŠผ์€ ํ…์ŠคํŠธ ์ž…๋ ฅ๊ฐ’ ๋“ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ\n\t\t// ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์€ ๊ฐ ํŒ์—… ํด๋ž˜์Šค(prompt ๋“ฑ)์—์„œ ํ•˜๋˜,\n\t\t// ๋‹ซ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹คํ–‰์€ ์—ฌ๊ธฐ์„œ ๋‹ด๋‹นํ•˜๋„๋ก ๊ฐ€์ด๋“œํ•ฉ๋‹ˆ๋‹ค.\n\t\tthis.querySelectorAll('.ok').forEach(btn => {\n\t\t\t// .ok ๋ฒ„ํŠผ์˜ ๋กœ์ง์€ ๊ฐ ํŒ์—…์˜ setupEvents์—์„œ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜\n\t\t\t// ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n\t\t});\n\n\t\t// ๋“œ๋ž˜๊ทธ ๋กœ์ง ์ƒ๋žต...\n\t};\n\n\t// --- ๋“œ๋ž˜๊ทธ ๋กœ์ง (Vanilla JS) ---\n\t#onMouseDown = e => {\n\n\t\tif (e.target.closest(\"buttons\")) return;\n\t\tif (e.button !== 0 || e.altKey || e.ctrlKey || e.shiftKey) return;\n\n\t\tconst rect = this.#dialog.getBoundingClientRect();\n\t\tthis.#shift = {\n\t\t\tx: e.clientX - rect.left,\n\t\t\ty: e.clientY - rect.top\n\t\t};\n\n\t\tconst onMouseMove = (ev) => {\n\t\t\tthis.#dialog.style.position = 'fixed';\n\t\t\tthis.#dialog.style.margin = '0';\n\t\t\tthis.#dialog.style.left = `${ev.clientX - this.#shift.x}px`;\n\t\t\tthis.#dialog.style.top = `${ev.clientY - this.#shift.y}px`;\n\t\t};\n\n\t\tconst onMouseUp = () => {\n\t\t\tdocument.removeEventListener('mousemove', onMouseMove);\n\t\t\tdocument.removeEventListener('mouseup', onMouseUp);\n\t\t};\n\n\t\tdocument.addEventListener('mousemove', onMouseMove);\n\t\tdocument.addEventListener('mouseup', onMouseUp);\n\t};\n\n\t#onTouchStart = e => {\n\t\tif (e.target.closest(\"buttons\")) return;\n\n\t\tconst rect = this.#dialog.getBoundingClientRect();\n\t\tconst touch = e.changedTouches[0];\n\t\tthis.#shift = {\n\t\t\tx: touch.pageX - rect.left,\n\t\t\ty: touch.pageY - rect.top\n\t\t};\n\n\t\tconst onTouchMove = (ev) => {\n\t\t\tconst t = ev.changedTouches[0];\n\t\t\tthis.#dialog.style.position = 'fixed';\n\t\t\tthis.#dialog.style.margin = '0';\n\t\t\tthis.#dialog.style.left = `${t.pageX - this.#shift.x}px`;\n\t\t\tthis.#dialog.style.top = `${t.pageY - this.#shift.y}px`;\n\t\t};\n\n\t\tconst onTouchEnd = () => {\n\t\t\tdocument.removeEventListener('touchmove', onTouchMove);\n\t\t\tdocument.removeEventListener('touchend', onTouchEnd);\n\t\t};\n\n\t\tdocument.addEventListener('touchmove', onTouchMove);\n\t\tdocument.addEventListener('touchend', onTouchEnd);\n\t};\n\n\tcloseWithAnimation(returnValue) {\n\t\tthis.#dialog.classList.add(\"out\"); // ํ‡ด์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘\n\n\t\t// ์• ๋‹ˆ๋ฉ”์ด์…˜(0.3s)์ด ๋๋‚œ ํ›„ ์ œ๊ฑฐ ๋ฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ\n\t\tsetTimeout(() => {\n\t\t\tthis.#dialog.close();\n\t\t\t// ๋ถ€๋ชจ(BasePopup)์—๊ฒŒ ์ž‘์—… ์™„๋ฃŒ์™€ ๊ฒฐ๊ณผ๊ฐ’์„ ์•Œ๋ฆผ\n\t\t\tthis.dispatchEvent(new CustomEvent('closed', { detail: returnValue }));\n\t\t\tthis.remove();\n\t\t}, 300);\n\t}\n}\n\n// BasePopup.js\nexport class BasePopup extends HTMLElement {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.attachShadow({ mode: 'open' });\n\t}\n\n\tstatic async open(PopupClass, message, title, options, renderFn) {\n\t\t// 1. ์„ค์ • ๋ณ‘ํ•ฉ\n\t\tconst tagName = PopupClass.tagName.toLowerCase();\n\t\tconst config = {\n\t\t\t\"true-text\": \"ํ™•์ธ\",\n\t\t\t\"false-text\": \"์ทจ์†Œ\",\n\t\t\tclass: \"classic\",\n\t\t\tanimation: \"fade\",\n\t\t\t...(window.nine?.config?.ux?.[tagName.replace('nine-', '').replace('-popup', '')] || {}),\n\t\t\t...options\n\t\t};\n\n\t\t// 2. ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ\n\t\tdocument.querySelectorAll(tagName).forEach(el => el.remove());\n\t\tconst el = document.createElement(tagName);\n\t\tif (config.class) el.classList.add(config.class);\n\t\tif (config.animation) el.classList.add(config.animation);\n\t\tdocument.body.appendChild(el);\n\n\t\t// 3. ๋ Œ๋”๋ง (๊ฐ ํŒ์—…์˜ UI ๊ทธ๋ฆฌ๊ธฐ)\n\t\trenderFn(el, message, config);\n\n\t\tconst dialogComp = el.shadowRoot.querySelector(\"nine-dialog\");\n\t\tif (title) dialogComp.setAttribute(\"subject\", title);\n\n\t\treturn new Promise((resolve) => {\n\t\t\t// [์ค‘์š”] nine-dialog์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚œ ํ›„ ๋˜์ง€๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ \n\t\t\tdialogComp.addEventListener('closed', (e) => resolve(e.detail));\n\n\t\t\t// ๊ฐ ํŒ์—… ํด๋ž˜์Šค์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ dialogComp.closeWithAnimation(๊ฐ’)์„\n\t\t\t// ํ˜ธ์ถœํ•˜๋„๋ก ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ด์คŒ\n\t\t\tel.setupEvents(resolve, dialogComp);\n\n\t\t\tdialogComp.showModal();\n\t\t});\n\t}\n}\n\nif (!customElements.get('nine-dialog')) {\n\tcustomElements.define(\"nine-dialog\", nineDialog);\n}\n","import { BasePopup } from \"./nineDialog.js\";\n\nexport class nineConfirmPopup extends BasePopup {\n\tstatic tagName = 'nine-confirm-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\n\trender(message, config) {\n\t\tthis.shadowRoot.innerHTML = `\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">${config[\"false-text\"]}</button>\n <button class=\"ok\">${config[\"true-text\"]}</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\tthis.shadowRoot.querySelector(\".ok\").onclick = () => dialogComp.closeWithAnimation(true);\n\t\t// ์ทจ์†Œ๋Š” nine-dialog ๋‚ด๋ถ€ ๊ธฐ๋ณธ ๋กœ์ง(closeWithAnimation(null))์ด ์ฒ˜๋ฆฌํ•จ\n\t}\n\n\tstatic confirm = (m, t, o) => BasePopup.open(nineConfirmPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\n// --- 3. ALERT (๋‹จ์ˆœ ์•Œ๋ฆผ) ---\nexport class nineAlertPopup extends BasePopup {\n\tstatic tagName = 'nine-alert-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\trender(message, config) {\n\t\tthis.shadowRoot.innerHTML = `\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">ํ™•์ธ</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\t// ์–ผ๋Ÿฟ์€ ์ทจ์†Œ ๋ฒ„ํŠผ ํ•˜๋‚˜๋งŒ ๋‘๊ฑฐ๋‚˜, ํ™•์ธ ๋ฒ„ํŠผ์ด cancel ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ\n\t}\n\n\tstatic alert = (m, t, o) => BasePopup.open(nineAlertPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\n// Custom Element ๋“ฑ๋ก\nif (!customElements.get('nine-confirm-popup')) customElements.define('nine-confirm-popup', nineConfirmPopup);\nif (!customElements.get('nine-alert-popup')) customElements.define(\"nine-alert-popup\", nineAlertPopup);","import { BasePopup } from \"./nineDialog.js\";\n\n/**\n *\n */\nexport class ninePromptPopup extends BasePopup {\n\tstatic tagName = 'nine-prompt-popup';\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\trender(message, config) {\n\n\t\ttrace.log(this);\n\t\ttrace.log(this.shadowRoot);\n\n\t\tthis.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\tdialog {\n\t\t\t\t\theight: 300px !important;\n\t\t\t\t}\n\t\t\t\t.msg {\n\t\t\t\t\theight: unset !important;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t\n <nine-dialog>\n <div class=\"msg\">${message.replace(/\\n/g, \"<br/>\")}</div>\n <div class=\"input-area\">\n <textarea placeholder=\"๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”...\"></textarea>\n </div>\n <div class=\"buttons-confirm\">\n <button class=\"cancel\">${config[\"false-text\"]}</button>\n <button class=\"ok\">${config[\"true-text\"]}</button>\n </div>\n </nine-dialog>`;\n\t}\n\n\tsetupEvents(resolve, dialogComp) {\n\t\tconst textarea = this.shadowRoot.querySelector(\"textarea\");\n\t\tconst okBtn = this.shadowRoot.querySelector(\".ok\");\n\n\t\t// ํ™•์ธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ textarea ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‹ซ๊ธฐ\n\t\tokBtn.onclick = () => dialogComp.closeWithAnimation(textarea.value);\n\n\t\t// ๋ Œ๋”๋ง ํ›„ ํฌ์ปค์Šค\n\t\trequestAnimationFrame(() => textarea.focus());\n\t}\n\n\tstatic prompt = (m, t, o) => BasePopup.open(ninePromptPopup, m, t, o, (el, msg, conf) => el.render(msg, conf));\n}\n\nif (!customElements.get('nine-prompt-popup')) {\n\tcustomElements.define('nine-prompt-popup', ninePromptPopup);\n}","/**\r\n * ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ try-catch ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ\r\n * @param {Promise} promise\r\n * @returns {Promise<[any, Error|null]>}\r\n */\r\nexport const safe = async (promise) => {\r\n\ttry {\r\n\t\tconst data = await promise;\r\n\t\treturn [data, null];\r\n\t} catch (err) {\r\n\t\treturn [null, err];\r\n\t}\r\n};","// src/core/NineUxUtil.js\r\nimport { nineAlertPopup, nineConfirmPopup } from './nineConfirm.js';\r\nimport { ninePromptPopup } from \"./ninePrompt.js\";\r\nimport { nine } from '../../core/Config.js'; // ๐Ÿš€ 1. Config์—์„œ nine ๊ฐ์ฒด ์ž„ํฌํŠธ\r\n\r\nexport class NineUxUtil {\r\n\t// static ํ•„๋“œ๋Š” ํด๋ž˜์Šค ์ž์ฒด์— ์ €์žฅ๋จ\r\n\tstatic cssPath = \"\";\r\n\r\n\t/**\r\n\t * ํŒ์—… ์ค€๋น„ ๋กœ์ง (Private ๋ฉ”์„œ๋“œ)\r\n\t */\r\n\t#prepare(type, message, title, defaultClass) {\r\n\r\n\t\tconst options = { class: defaultClass, animation: 'fade' };\r\n\t\t//const popup = type === 'alert' ? nineAlertPopup : (type === 'confirm' ? nineConfirmPopup : ninePromptPopup);\r\n\t\tlet isExecuted = false;\r\n\r\n\t\tconst popupMap = {\r\n\t\t\talert: nineAlertPopup,\r\n\t\t\tconfirm: nineConfirmPopup,\r\n\t\t\tprompt: ninePromptPopup\r\n\t\t};\r\n\r\n\t\tconst popup = popupMap[type];\r\n\r\n\t\tconst runner = {\r\n\t\t\trgb: () => { options.class = 'rgb'; return runner; },\r\n\t\t\tclassic: () => { options.class = 'classic'; return runner; },\r\n\t\t\tshake: () => { options.animation = 'shake'; return runner; },\r\n\t\t\trun: () => { options.animation = 'roadRunner'; return runner; },\r\n\t\t\tzoom: () => { options.animation = 'zoom'; return runner; },\r\n\r\n\t\t\tthen: (resolve, reject) => {\r\n\t\t\t\tisExecuted = true;\r\n\t\t\t\treturn popup[type](message, title, options).then(resolve, reject);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Microtask: ๋™๊ธฐ ์ฒด์ด๋‹์ด ๋ชจ๋‘ ๋๋‚œ ํ›„ ์‹คํ–‰\r\n\t\tPromise.resolve().then(() => {\r\n\t\t\tif (!isExecuted) {\r\n\t\t\t\tisExecuted = true;\r\n\t\t\t\tpopup[type](message, title, options);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn runner;\r\n\t}\r\n\r\n\talert = (message, title = \"Alert\") => {\r\n\t\treturn this.#prepare('alert', message, title, 'classic');\r\n\t}\r\n\r\n\tconfirm = (message, title = \"Confirm\") => {\r\n\t\treturn this.#prepare('confirm', message, title, 'classic');\r\n\t}\r\n\r\n\tprompt = (message, title = \"Prompt\") => {\r\n\t\treturn this.#prepare('prompt', message, title, 'classic');\r\n\t}\r\n}\r\n\r\nObject.assign(nine, new NineUxUtil());","import { trace } from \"@nopeer\";\r\nimport { NineUxUtil } from \"./dialog/NineUxUtil.js\";\r\n\r\nclass UxSplitter extends HTMLElement {\r\n\r\n\t#mode;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.attachShadow({ mode: \"open\" });\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\r\n\t\tthis.#init();\r\n\t}\r\n\r\n\t#detectMode = (el) => {\r\n\t\tconst prev = el.previousElementSibling;\r\n\t\tconst next = el.nextElementSibling;\r\n\t\tif (!prev || !next) {\r\n\t\t\tthis.#mode = this.classList.contains('h') ? \"h\" : \"v\";\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst prevRect = prev.getBoundingClientRect();\r\n\t\tconst nextRect = next.getBoundingClientRect();\r\n\r\n\t\tif (this.classList.contains('h')) {\r\n\t\t\tthis.#mode = \"h\";\r\n\t\t} else if (this.classList.contains('v')) {\r\n\t\t\tthis.#mode = \"v\";\r\n\t\t} else {\r\n\t\t\tthis.#mode = (Math.abs(prevRect.top - nextRect.top) < 5) ? \"h\" : \"v\";\r\n\t\t}\r\n\t};\r\n\r\n\t#startDrag = (e) => {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tconst splitterRect = this.getBoundingClientRect();\r\n\t\tconst isHorizontal = this.#mode === \"h\";\r\n\r\n\t\t// ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ์™€ ์Šคํ”Œ๋ฆฌํ„ฐ ์‹œ์ž‘์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ\r\n\t\tconst clickOffset = isHorizontal\r\n\t\t\t? e.clientX - splitterRect.left\r\n\t\t\t: e.clientY - splitterRect.top;\r\n\r\n\t\tconst dragBar = document.createElement(\"div\");\r\n\t\tdragBar.className = `nx-splitter-drag-bar-${this.#mode}`;\r\n\r\n\t\tObject.assign(dragBar.style, {\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tzIndex: \"999\",\r\n\t\t\tbackground: \"#666\",\r\n\t\t\topacity: \"0.6\",\r\n\t\t\tpointerEvents: \"none\"\r\n\t\t});\r\n\r\n\t\tconst root = this.getRootNode({ composed: true });\r\n\t\tconst parent = root instanceof ShadowRoot ? root.host : this.parentElement;\r\n\t\tconst prev = this.previousElementSibling;\r\n\t\tconst next = this.nextElementSibling;\r\n\r\n\t\tif (!parent || !prev || !next) {\r\n\t\t\ttrace.warn(\"Spliter's parent or siblings not found.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t(parent.shadowRoot || parent).appendChild(dragBar);\r\n\t\tconst dragBarOffsetParentRect = dragBar.offsetParent.getBoundingClientRect();\r\n\r\n\t\tconst prevRect = prev.getBoundingClientRect();\r\n\t\tconst nextRect = next.getBoundingClientRect();\r\n\r\n\t\t// ๋“œ๋ž˜๊ทธ ๋ฐ”์˜ ์ดˆ๊ธฐ ์œ„์น˜์™€ ํฌ๊ธฐ ์„ค์ •\r\n\t\tconst initialSplitterPosInParent = (isHorizontal\r\n\t\t\t? splitterRect.left - dragBarOffsetParentRect.left\r\n\t\t\t: splitterRect.top - dragBarOffsetParentRect.top) + clickOffset;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tdragBar.style.top = \"0\";\r\n\t\t\tdragBar.style.left = `${initialSplitterPosInParent}px`;\r\n\t\t\tdragBar.style.width = \"2px\";\r\n\t\t\tdragBar.style.height = \"100%\";\r\n\t\t} else {\r\n\t\t\tdragBar.style.left = \"0\";\r\n\t\t\tdragBar.style.top = `${initialSplitterPosInParent}px`;\r\n\t\t\tdragBar.style.height = \"2px\";\r\n\t\t\tdragBar.style.width = \"100%\";\r\n\t\t}\r\n\r\n\t\tdragBar.style.mixBlendMode = \"difference\";\r\n\t\tdragBar.style.zIndex = \"99999\";\r\n\r\n\t\tconst minLimit = isHorizontal\r\n\t\t\t? prevRect.left - dragBarOffsetParentRect.left\r\n\t\t\t: prevRect.top - dragBarOffsetParentRect.top;\r\n\t\tconst maxLimit = isHorizontal\r\n\t\t\t? nextRect.right - dragBarOffsetParentRect.left - splitterRect.width\r\n\t\t\t: nextRect.bottom - dragBarOffsetParentRect.top - splitterRect.height;\r\n\r\n\t\tconst onMove = moveEvent => {\r\n\t\t\tconst clientPos = isHorizontal ? moveEvent.clientX : moveEvent.clientY;\r\n\t\t\tconst currentPosInParent = isHorizontal\r\n\t\t\t\t? clientPos - dragBarOffsetParentRect.left\r\n\t\t\t\t: clientPos - dragBarOffsetParentRect.top;\r\n\r\n\t\t\tconst clampedPos = Math.max(minLimit, Math.min(currentPosInParent, maxLimit));\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tdragBar.style.left = `${clampedPos}px`;\r\n\t\t\t} else {\r\n\t\t\t\tdragBar.style.top = `${clampedPos}px`;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst onUp = () => {\r\n\t\t\twindow.removeEventListener(\"mousemove\", onMove);\r\n\t\t\twindow.removeEventListener(\"mouseup\", onUp);\r\n\t\t\tdragBar.remove();\r\n\r\n\t\t\tconst allChildren = Array.from(parent.children);\r\n\t\t\tconst allPanels = allChildren.filter(el => el.tagName.toLowerCase() !== 'nx-splitter');\r\n\r\n\t\t\t// โญโญ gap ํฌ๊ธฐ ๊ณ„์‚ฐ โญโญ\r\n\t\t\tconst style = window.getComputedStyle(parent);\r\n\t\t\tconst gapValue = isHorizontal ? style.getPropertyValue('column-gap') : style.getPropertyValue('row-gap');\r\n\t\t\tconst gapSize = parseFloat(gapValue) || 0;\r\n\t\t\tconst gapCount = allChildren.length > 1 ? allChildren.length - 1 : 0;\r\n\t\t\tconst totalGapSize = gapCount * gapSize;\r\n\r\n\t\t\tconst finalDragBarPos = isHorizontal ? parseFloat(dragBar.style.left) : parseFloat(dragBar.style.top);\r\n\t\t\tconst dragOffset = finalDragBarPos - initialSplitterPosInParent;\r\n\r\n\t\t\tconst prevSize = isHorizontal ? prev.getBoundingClientRect().width : prev.getBoundingClientRect().height;\r\n\t\t\tconst nextSize = isHorizontal ? next.getBoundingClientRect().width : next.getBoundingClientRect().height;\r\n\r\n\t\t\tlet newPrevSize = prevSize + dragOffset;\r\n\t\t\tlet newNextSize = nextSize - dragOffset;\r\n\r\n\t\t\t// ํŒจ๋„ ํฌ๊ธฐ๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์ œํ•œํ•˜๊ณ , ๋‹ค๋ฅธ ํŒจ๋„์— ์ฐจ์ด๋ฅผ ๋ณด์ •\r\n\t\t\tif (newPrevSize < 0) {\r\n\t\t\t\tnewNextSize += newPrevSize;\r\n\t\t\t\tnewPrevSize = 0;\r\n\t\t\t}\r\n\t\t\tif (newNextSize < 0) {\r\n\t\t\t\tnewPrevSize += newNextSize;\r\n\t\t\t\tnewNextSize = 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst initialSizes = allPanels.map(panel => isHorizontal ? panel.getBoundingClientRect().width : panel.getBoundingClientRect().height);\r\n\r\n\t\t\tconst totalSplitterSize = allChildren.reduce((sum, child) => {\r\n\t\t\t\tif (child.tagName.toLowerCase() === 'nx-splitter') {\r\n\t\t\t\t\treturn sum + (isHorizontal ? child.getBoundingClientRect().width : child.getBoundingClientRect().height);\r\n\t\t\t\t}\r\n\t\t\t\treturn sum;\r\n\t\t\t}, 0);\r\n\r\n\t\t\tconst totalContainerSize = (isHorizontal ? parent.getBoundingClientRect().width : parent.getBoundingClientRect().height);\r\n\t\t\tconst totalFlexSpace = totalContainerSize - totalSplitterSize - totalGapSize;\r\n\r\n\t\t\tlet flexSum = 0;\r\n\t\t\tallPanels.forEach((panel, index) => {\r\n\t\t\t\tlet newSize;\r\n\t\t\t\tif (panel === prev) {\r\n\t\t\t\t\tnewSize = newPrevSize;\r\n\t\t\t\t} else if (panel === next) {\r\n\t\t\t\t\tnewSize = newNextSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewSize = initialSizes[index];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst newFlexBasis = newSize / totalFlexSpace;\r\n\t\t\t\t//panel.style.flex = `${newFlexBasis} ${newFlexBasis} 0`;\r\n\r\n\t\t\t\ttrace.log(panel);\r\n\r\n\t\t\t\tif (panel.classList.contains('sidebar')) {\r\n\t\t\t\t\t// ๋“œ๋ž˜๊ทธ๊ฐ€ ๋๋‚œ ์‹œ์ ์˜ newSize(px)๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณ ์ •๊ฐ’์œผ๋กœ ํ• ๋‹น\r\n\t\t\t\t\t// ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„์œจ(%)์ด ์•„๋‹ˆ๋ผ ๋”ฑ ๊ทธ ํ”ฝ์…€๋งŒํผ๋งŒ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.\r\n\t\t\t\t\tpanel.style.flex = `0 0 ${newSize}px`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// ๋‚˜๋จธ์ง€ ๋ฉ”์ธ ๋ณด๋“œ ๊ฐ™์€ ์œ ์—ฐํ•œ ํŒจ๋„์€ ๋น„์œจ(%)๋กœ ์ฒ˜๋ฆฌ\r\n\t\t\t\t\t//const newFlexBasis = newSize / totalFlexSpace;\r\n\t\t\t\t\tpanel.style.flex = `${newFlexBasis} ${newFlexBasis} 0`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tflexSum += newFlexBasis;\r\n\t\t\t});\r\n\r\n\t\t\ttrace.log(`dragOffset: ${dragOffset}`);\r\n\t\t\ttrace.log(`Calculated FlexSum: ${flexSum}`);\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"mousemove\", onMove);\r\n\t\twindow.addEventListener(\"mouseup\", onUp);\r\n\t};\r\n\r\n\tget cssPath() {\r\n\t\treturn this.getAttribute(\"css-path\") || NineUxUtil.cssPath;\r\n\t}\r\n\r\n\t#init = () => {\r\n\t\tthis.#detectMode(this);\r\n\t\tthis.classList.add(this.#mode);\r\n\r\n\t\tconst contents = this.innerHTML.trim();\r\n\t\t//const gripClass = `grip-${this.#mode}`;\r\n\t\tconst gripTmpl = (contents === \"\") ? `<div class=\"grip\"></div>` : `<div class=\"grip\"></div><div class=\"inner-container\">${contents}</div><div class=\"grip\"></div>`;\r\n\r\n\t\tconst customImport = nine.cssPath ? `@import \"${nine.cssPath}/nine-util.css\";` : \"\";\r\n\r\n\t\tthis.innerHTML = \"\";\r\n\t\tconst htmlTmpl = document.createElement(\"template\");\r\n\r\n\t\thtmlTmpl.innerHTML = `\r\n\t\t\t<style>\r\n\t\t\t\t@import \"https://cdn.jsdelivr.net/npm/@ninebone/util@${__APP_VERSION__}/dist/css/nine-util.css\";\r\n\t\t\t\t${customImport}\r\n\t\t\t</style>\r\n\t\t\t${gripTmpl}\r\n `;\r\n\r\n\t\tthis.shadowRoot.appendChild(htmlTmpl.content.cloneNode(true));\r\n\r\n\t\tthis.shadowRoot.querySelectorAll(\".grip\").forEach(el => {\r\n\t\t\tel.addEventListener(\"mousedown\", e => this.#startDrag(e));\r\n\t\t});\r\n\r\n\t\tthis.#prepareLayout();\r\n\r\n\t\twindow.addEventListener(\"resize\", () => this.#prepareLayout());\r\n\t};\r\n\r\n\t#prepareLayout = () => {\r\n\t\tconst isHorizontal = this.#mode === \"h\";\r\n\t\tconst parent = this.parentElement;\r\n\t\tconst allPanels = Array.from(parent.children).filter(el => el.tagName.toLowerCase() !== 'nx-splitter');\r\n\t\tif (allPanels.length < 2) return;\r\n\r\n\t\tconst parentRect = parent.getBoundingClientRect();\r\n\t\tconst totalContentSize = allPanels.reduce((sum, el) => {\r\n\t\t\tconst size = isHorizontal ? el.getBoundingClientRect().width : el.getBoundingClientRect().height;\r\n\t\t\treturn sum + size;\r\n\t\t}, 0);\r\n\t\tconst totalParentSize = isHorizontal ? parentRect.width : parentRect.height;\r\n\r\n\t\tallPanels.forEach(panel => {\r\n\t\t\tconst size = isHorizontal ? panel.getBoundingClientRect().width : panel.getBoundingClientRect().height;\r\n\t\t\tconst newSize = totalParentSize * (size / totalContentSize);\r\n\t\t\tconst flexGrow = newSize / totalParentSize;\r\n\t\t\tpanel.style.flex = `${flexGrow} ${flexGrow} 0`;\r\n\t\t});\r\n\t};\r\n}\r\n\r\nif (!customElements.get('nine-splitter')) {\r\n\tcustomElements.define(\"nine-splitter\", UxSplitter);\r\n}","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { trace } from \"@nopeer\";\n\n// ๐ŸŽฏ ๋ณต์žกํ•œ ์ƒ์†์„ ์ง€์šฐ๊ณ  ํŒ์—… ๊ณ ์œ ์˜ ์—ญํ• (๊ป๋ฐ๊ธฐ ์กฐ๋ฆฝ)๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.\nexport class NinePopup extends HTMLElement {\n\tstatic get tagName() { return \"nine-popup\"; }\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.attachShadow({ mode: 'open' });\n\t}\n\n\tconnectedCallback() {\n\t\t// ๐Ÿ”’ Shadow DOM ๋‚ด๋ถ€์— nine-dialog ๋ ˆ์ด์•„์›ƒ ๊ตฌ์ถ•\n\t\tthis.shadowRoot.innerHTML = `\n\t\t\t<nine-dialog>\n\t\t\t\t<div class=\"popup-body\"></div>\n\t\t\t</nine-dialog>\n\t\t`;\n\t}\n\n\tclose(returnValue = null) {\n\t\tconst $dialog = this.dialog;\n\t\tif ($dialog) {\n\t\t\t// ๐ŸŽฏ ๊ตฌ์งˆ๊ตฌ์งˆํ•œ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๋Œ€์‹ , ๊ธฐ์กด ์ž์‚ฐ์ธ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ข…๋ฃŒ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํƒ€๊ฒฉํ•ฉ๋‹ˆ๋‹ค.\n\t\t\t$dialog.closeWithAnimation(returnValue);\n\t\t}\n\t}\n\n\t// ๐Ÿ”“ ๋ฆฌ์•กํŠธ ์—”์ง„์ด ๊ฝ‚์•„ ๋„ฃ์„ ์ž…๊ตฌ ํฌ์ธํ„ฐ ๊ฐœ๋ฐฉ\n\tget popupBody() {\n\t\treturn this.shadowRoot?.querySelector('nine-dialog .popup-body') || null;\n\t}\n\n\t// ๐Ÿ”“ ๋ฆฌ์•กํŠธ๋‚˜ ์™ธ๋ถ€ ์œ ํ‹ธ์—์„œ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ํ†ต๋กœ\n\tget dialog() {\n\t\treturn this.shadowRoot?.querySelector('nine-dialog') || null;\n\t}\n}\n\nif (!customElements.get('nine-popup')) customElements.define('nine-popup', NinePopup);","import { nine } from '../core/Config.js';\r\nimport dayjs from \"dayjs\";\r\nimport React from 'react'; // ๐ŸŽฏ React ๋‚ด์žฅ ํ—ฌํผ ์ž„ํฌํŠธ\r\nimport { createRoot } from 'react-dom/client';\r\nimport { NinePopup } from './NinePopup.js';\r\n\r\nexport class NineUtil {\r\n\r\n\t// ๐Ÿ“… 1. ๋‚ ์งœ ํฌ๋งท ํ—ฌํผ (์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ)\r\n\tformatDate = (v, fmt) => {\r\n\t\treturn dayjs(v).format(fmt);\r\n\t};\r\n\r\n\t/**\r\n\t * ๐Ÿ”ฎ ์ดˆ๊ฐ„๋‹จ ๋งŒ๋Šฅ ๋“œ๋ž˜๊ทธ ํŒ์—… ์—”์ง„ (Promise/Then ๊ทœ๊ฒฉ)\r\n\t * @param {React.Component} ContentComponent - ํŒ์—… ๋‚ด๋ถ€์— ๋„์šธ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ\r\n\t * @param {Object} param - ํŒ์—… ์•Œ๋งน์ด์— 'data'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐฐ๋‹ฌ๋  ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด\r\n\t * @param {string} title - ์‹ญ์ž ๋“œ๋ž˜๊ทธ ๋ฐ” ํ—ค๋”์— ๊ฝ‚ํž ํƒ€์ดํ‹€๋ช… (๊ธฐ๋ณธ๊ฐ’: Details)\r\n\t * @returns {Promise} ํŒ์—…์ด ๋‹ซํž ๋•Œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ์˜์ˆ˜์ฆ\r\n\t */\r\n\tpopup = (ContentComponent, param = {}, title = \"Details\") => {\r\n\t\tdocument.querySelectorAll(NinePopup.tagName).forEach(el => el.remove());\r\n\r\n\t\tconst $popupWrapper = document.createElement(NinePopup.tagName);\r\n\t\tdocument.body.appendChild($popupWrapper);\r\n\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst $bodySpace = $popupWrapper.popupBody;\r\n\t\t\tconst $dialogComp = $popupWrapper.dialog;\r\n\r\n\t\t\tif (title && $dialogComp) $dialogComp.setAttribute(\"subject\", title);\r\n\r\n\t\t\tconst root = createRoot($bodySpace);\r\n\r\n\t\t\t// ๐ŸŽฏ ์˜ค์ง ํ•˜๋‚˜, ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ์™„์ „ํžˆ ํŒŒ๊ดด(Closed)๋˜๋Š” ์‹œ์ ๋งŒ ๋”ฑ ๋‚š์•„์ฑ•๋‹ˆ๋‹ค.\r\n\t\t\t$dialogComp?.addEventListener('closed', (e) => {\r\n\t\t\t\tresolve(e.detail); // ์ตœ์ข… ๋ฐ˜ํ™˜๊ฐ’ ๋ถ€๋ชจ์˜ .then()์œผ๋กœ ์ „๋‹ฌ\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\troot.unmount();\r\n\t\t\t\t\t$popupWrapper.remove();\r\n\t\t\t\t}, 0);\r\n\t\t\t});\r\n\r\n\t\t\troot.render(React.createElement(ContentComponent, { data: param }));\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\t$dialogComp?.showModal();\r\n\t\t\t}, 0);\r\n\t\t});\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 2. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๋ฌด๋ ฅํ™”ํ•˜๊ณ  ๊นŠ์ด ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋งŒ๋Šฅ ์ฟผ๋ฆฌ\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” CSS ์„ ํƒ์ž (์˜ˆ: 'input[name]')\r\n\t * @param {HTMLElement|ShadowRoot|Document} root - ํƒ์ƒ‰ ์‹œ์ž‘์ \r\n\t * @returns {HTMLElement[]} ๋งค์นญ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM ์—˜๋ฆฌ๋จผํŠธ ๋ฐฐ์—ด\r\n\t */\r\n\tquerySelectorAll = (selector, root = document) => {\r\n\t\tconst results = [];\r\n\r\n\t\tconst search = (node) => {\r\n\t\t\tif (!node) return;\r\n\r\n\t\t\t// ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ShadowRoot๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ๋‚ด๋ถ€๋ถ€ํ„ฐ ํƒ์ƒ‰\r\n\t\t\tif (node.shadowRoot) {\r\n\t\t\t\tsearch(node.shadowRoot);\r\n\t\t\t}\r\n\r\n\t\t\t// ํ˜„์žฌ ๋ ˆ๋ฒจ(Light DOM ๋˜๋Š” Shadow DOM)์—์„œ ๋งค์นญ๋˜๋Š” ํƒ€๊ฒŸ ์ˆ˜์ง‘\r\n\t\t\tnode.querySelectorAll?.(selector).forEach(elem => {\r\n\t\t\t\tif (!results.includes(elem)) {\r\n\t\t\t\t\tresults.push(elem);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// ์„ฑ๋Šฅ ์ตœ์ ํ™”: querySelectorAll('*') ๋Œ€์‹  ์‹ค์ œ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋“ค๋งŒ ๋ฃจํ”„ ๋Œ๋ฉฐ ์žฌ๊ท€ ํƒ์ƒ‰\r\n\t\t\tconst children = node.children ? Array.from(node.children) : [];\r\n\t\t\tchildren.forEach(child => {\r\n\t\t\t\tsearch(child);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tsearch(root);\r\n\t\treturn results;\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 3. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๋šซ๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋งค์นญ๋˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ (์กฐ๊ธฐ ์ข…๋ฃŒ ์ตœ์ ํ™”)\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” CSS ์„ ํƒ์ž\r\n\t * @param {HTMLElement|ShadowRoot|Document} root - ํƒ์ƒ‰ ์‹œ์ž‘์ \r\n\t * @returns {HTMLElement|null} ๋งค์นญ๋œ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด ๋˜๋Š” null\r\n\t */\r\n\tquerySelector = (selector, root = document) => {\r\n\t\tif (!root) return null;\r\n\r\n\t\t// ํ˜„์žฌ ๋…ธ๋“œ ์ž์ฒด์—์„œ ๋ฐ”๋กœ ๋งค์นญ๋˜๋Š” ๊ฒŒ ์žˆ๋‹ค๋ฉด ์ฆ‰์‹œ ๋ฐ˜ํ™˜\r\n\t\tlet found = root.querySelector?.(selector);\r\n\t\tif (found) return found;\r\n\r\n\t\t// ํ˜„์žฌ ๋…ธ๋“œ์— Shadow DOM ์žฅ๋ฒฝ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๋‚ด๋ถ€๋ฅผ ๋จผ์ € ํƒ์ƒ‰\r\n\t\tif (root.shadowRoot) {\r\n\t\t\tfound = this.querySelector(selector, root.shadowRoot);\r\n\t\t\tif (found) return found;\r\n\t\t}\r\n\r\n\t\t// ์ž์‹ ์š”์†Œ๋“ค์„ ์ˆœํšŒํ•˜๋ฉฐ ๊นŠ์ˆ™์ด ์ˆจ์€ ํƒ€๊ฒŸ ์ถ”์ \r\n\t\tconst children = root.children ? Array.from(root.children) : [];\r\n\t\tfor (const child of children) {\r\n\t\t\tfound = this.querySelector(selector, child);\r\n\t\t\tif (found) return found;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\t/**\r\n\t * ๐ŸŽฏ 4. Shadow DOM ๊ฒฝ๊ณ„๋ฅผ ๊ด€ํ†ตํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋งŒ๋Šฅ ํด๋กœ์ง€์ŠคํŠธ\r\n\t * @param {string} selector - ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ชจ์˜ CSS ์„ ํƒ์ž (์˜ˆ: 'nine-popup')\r\n\t * @param {HTMLElement} startElement - ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๊ธฐ์ค€ ์—˜๋ฆฌ๋จผํŠธ (๋ณดํ†ต e.target)\r\n\t * @returns {HTMLElement|null} ๋งค์นญ๋œ ์กฐ์ƒ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด ๋˜๋Š” null\r\n\t */\r\n\tclosest = (selector, startElement) => {\r\n\t\tif (!startElement || typeof selector !== 'string') return null;\r\n\r\n\t\tlet currentElement = startElement;\r\n\r\n\t\twhile (currentElement) {\r\n\t\t\t// โ‘  ์ผ๋ฐ˜ Element ๋…ธ๋“œ์ผ ๋•Œ๋งŒ matches ๊ฒ€์‚ฌ (ShadowRoot ๋“ฑ ๋ถ„๊ธฐ ๋ฐฉ์–ด)\r\n\t\t\tif (currentElement.nodeType === Node.ELEMENT_NODE) {\r\n\t\t\t\tif (currentElement.matches(selector)) {\r\n\t\t\t\t\treturn currentElement;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// โ‘ก ๐Ÿš€ [ํ•ต์‹ฌ] ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ Shadow DOM ๋‚ด๋ถ€๋ผ๋ฉด getRootNode().host๋ฅผ ํ†ตํ•ด ๋ฐ”๊นฅ ์„ธ์ƒ(Host)์œผ๋กœ ํƒˆ์ถœ!\r\n\t\t\t// ๋งŒ์•ฝ ๋” ์ด์ƒ ์˜ฌ๋ผ๊ฐˆ Host๊ฐ€ ์—†๋‹ค๋ฉด ์ผ๋ฐ˜ ์ƒ์œ„ ๋ถ€๋ชจ(parentElement)๋กœ ์ด๋™\r\n\t\t\tconst rootNode = currentElement.getRootNode?.();\r\n\r\n\t\t\tif (rootNode && rootNode instanceof ShadowRoot) {\r\n\t\t\t\tcurrentElement = rootNode.host; // ์žฅ๋ฒฝ ๋ŒํŒŒ\r\n\t\t\t} else {\r\n\t\t\t\tcurrentElement = currentElement.parentElement || null; // ์ผ๋ฐ˜ ๋ถ€๋ชจ ์ถ”์ \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\n// ๐ŸŽฏ [ํ•ต์‹ฌ] ๊ธ€๋กœ๋ฒŒ `nine` ๊ฐ์ฒด์— ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋“ค์„ ํ†ต์งธ๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.\r\nObject.assign(nine, new NineUtil());","// 1. ๊ธฐ์กด core ๋ชจ๋“ˆ\r\n//import { NineUxUtil } from './ux/dialog/NineUxUtil.js';\r\nimport { nine, subscribeConfig, config } from './core/Config.js';\r\nimport { Trace, trace } from './core/Trace.js';\r\nimport { TaskDebouncer } from './core/TaskDebouncer.js';\r\n\r\n// 2. ์‹ ๊ทœ net ๋ฐ ux ๋ชจ๋“ˆ ์ถ”๊ฐ€\r\nimport { api, Fetch } from './net/Fetch.js';\r\nimport { Loading } from './ux/Loading.js';\r\n\r\nimport { nineDialog } from './ux/dialog/nineDialog.js';\r\nimport { nineConfirmPopup, nineAlertPopup } from './ux/dialog/nineConfirm.js';\r\nimport { ninePromptPopup } from './ux/dialog/ninePrompt.js';\r\n\r\nimport { safe } from \"./utils/promise.js\"; // ๊ฒฝ๋กœ์— ๋งž์ถฐ ์ž„ํฌํŠธ\r\n// ux\r\nimport './ux/UxSplitter.js';\r\nimport './ux/dialog/NineUxUtil.js';\r\nimport './utils/NineUtil.js';\r\nimport './utils/NinePopup.js';\r\n\r\n/**\r\nconst utilInstance = new NineUxUtil();\r\nnine.alert = utilInstance.alert.bind(utilInstance);\r\nnine.confirm = utilInstance.confirm.bind(utilInstance);\r\nnine.prompt = utilInstance.prompt.bind(utilInstance);\r\nnine.formatDate = utilInstance.formatDate.bind(utilInstance);\r\n\t*/\r\n//const utilInstance = new NineUxUtil();\r\n\r\n// ๐Ÿ’ก ์ด๋ฏธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ์ฒด ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•ด์ฃผ๋ฉด ๋๋‚ฉ๋‹ˆ๋‹ค!\r\n//Object.assign(nine, utilInstance);\r\n\r\nnine.safe = safe;\r\n\r\n// ๊ธฐ์กด nine ๊ฐ์ฒด(Config)์™€ Util ๊ธฐ๋Šฅ์„ ํ•ฉ์„ฑ\r\n//Object.assign(nine, utilInstance);\r\n\r\nnine.api = api;\r\nnine.trace = trace;\r\nnine.subscribeConfig = subscribeConfig;\r\nnine.config = config || {};\r\n\r\nexport {\r\n\tnine,\r\n\tsubscribeConfig,\r\n\tconfig,\r\n\tTrace,\r\n\ttrace,\r\n\tTaskDebouncer,\r\n\tapi, // ๐Ÿš€ ์ถ”๊ฐ€: ์ด์ œ ์„œ๋น„์Šค์—์„œ api.get() ๊ฐ€๋Šฅ\r\n\tFetch, // ๐Ÿš€ ์ถ”๊ฐ€: ํด๋ž˜์Šค ์ž์ฒด๋„ ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ ๋…ธ์ถœ\r\n\tLoading as loading, // ๐Ÿš€ ์ถ”๊ฐ€: loading.show() ๋กœ ์“ฐ๊ธฐ ํŽธํ•˜๊ฒŒ alias\r\n\tnineDialog,\r\n\tnineAlertPopup, nineConfirmPopup, ninePromptPopup\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n\twindow.nine = nine;\r\n}\r\n"],"names":["nine","trace","Trace","traceOrigin","_a","config","el","_init","this","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","x_google_ignoreList":[13]}