@operato/scene-storage 10.0.0-beta.41 โ†’ 10.0.0-beta.42

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.
Files changed (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/MIGRATION-plan-a-slot-api.md +266 -0
  3. package/PLAN-A-rack-as-slot-holder.md +164 -0
  4. package/dist/crane.js +1 -1
  5. package/dist/crane.js.map +1 -1
  6. package/dist/index.d.ts +3 -4
  7. package/dist/index.js +1 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/rack-grid-3d.d.ts +18 -7
  10. package/dist/rack-grid-3d.js +372 -69
  11. package/dist/rack-grid-3d.js.map +1 -1
  12. package/dist/rack-grid-cell.d.ts +21 -72
  13. package/dist/rack-grid-cell.js +147 -243
  14. package/dist/rack-grid-cell.js.map +1 -1
  15. package/dist/rack-grid.d.ts +277 -56
  16. package/dist/rack-grid.js +1230 -695
  17. package/dist/rack-grid.js.map +1 -1
  18. package/dist/rack-materials.d.ts +9 -0
  19. package/dist/rack-materials.js +55 -0
  20. package/dist/rack-materials.js.map +1 -0
  21. package/dist/storage-rack-3d.d.ts +15 -0
  22. package/dist/storage-rack-3d.js +131 -30
  23. package/dist/storage-rack-3d.js.map +1 -1
  24. package/dist/storage-rack.d.ts +242 -45
  25. package/dist/storage-rack.js +684 -106
  26. package/dist/storage-rack.js.map +1 -1
  27. package/package.json +3 -3
  28. package/src/crane.ts +1 -1
  29. package/src/index.ts +3 -4
  30. package/src/rack-grid-3d.ts +383 -80
  31. package/src/rack-grid-cell.ts +161 -305
  32. package/src/rack-grid.ts +1263 -762
  33. package/src/rack-materials.ts +61 -0
  34. package/src/storage-rack-3d.ts +144 -30
  35. package/src/storage-rack.ts +763 -111
  36. package/test/test-carrier-lifecycle.ts +361 -0
  37. package/test/test-coord-alignment.ts +201 -0
  38. package/test/test-external-to-rack.ts +461 -0
  39. package/test/test-mover-concurrent-bug.ts +304 -0
  40. package/test/test-mover-rollback.ts +290 -0
  41. package/test/test-r19-place-absorb.ts +174 -0
  42. package/test/test-rack-3d-attach-real.ts +301 -0
  43. package/test/test-rack-concurrent.ts +254 -0
  44. package/test/test-rack-edge-cases.ts +323 -0
  45. package/test/test-rack-grid-cell.ts +318 -0
  46. package/test/test-rack-grid-location.ts +657 -0
  47. package/test/test-real-3d-positioning.ts +158 -0
  48. package/test/test-slot-center-convention.ts +116 -0
  49. package/test/test-slot-target.ts +189 -0
  50. package/test/test-storage-rack-batched.ts +606 -0
  51. package/test/test-storage-rack-click.ts +329 -0
  52. package/test/test-storage-rack-slot-api.ts +357 -0
  53. package/test/test-toscene-convention.ts +162 -0
  54. package/test/test-user-scenario-sequential.ts +334 -0
  55. package/translations/en.json +2 -0
  56. package/translations/ja.json +2 -0
  57. package/translations/ko.json +2 -0
  58. package/translations/ms.json +2 -0
  59. package/translations/zh.json +2 -0
  60. package/tsconfig.tsbuildinfo +1 -1
  61. package/dist/rack-column.d.ts +0 -35
  62. package/dist/rack-column.js +0 -258
  63. package/dist/rack-column.js.map +0 -1
  64. package/dist/rack-grid-helpers.d.ts +0 -28
  65. package/dist/rack-grid-helpers.js +0 -71
  66. package/dist/rack-grid-helpers.js.map +0 -1
  67. package/dist/rack-grid-location.d.ts +0 -37
  68. package/dist/rack-grid-location.js +0 -227
  69. package/dist/rack-grid-location.js.map +0 -1
  70. package/dist/storage-cell-3d.d.ts +0 -25
  71. package/dist/storage-cell-3d.js +0 -88
  72. package/dist/storage-cell-3d.js.map +0 -1
  73. package/dist/storage-cell.d.ts +0 -73
  74. package/dist/storage-cell.js +0 -215
  75. package/dist/storage-cell.js.map +0 -1
  76. package/src/rack-column.ts +0 -340
  77. package/src/rack-grid-helpers.ts +0 -77
  78. package/src/rack-grid-location.ts +0 -286
  79. package/src/storage-cell-3d.ts +0 -101
  80. package/src/storage-cell.ts +0 -267
  81. package/test/test-cell-position.ts +0 -105
  82. package/test/test-rack-grid.ts +0 -77
@@ -1 +1 @@
1
- {"version":3,"file":"rack-grid.js","sourceRoot":"","sources":["../src/rack-grid.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\n\nimport {\n ApplicationContext,\n Component,\n ComponentNature,\n ContainerAbstract,\n Control,\n Layout,\n Model,\n POINT,\n Properties,\n sceneComponent,\n RealObject\n} from '@hatiolab/things-scene'\nimport type { State } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\n\n/** RackGrid ์ปดํฌ๋„ŒํŠธ state */\nexport interface RackGridState extends State {\n rows?: number\n columns?: number\n zone?: string\n shelves?: number\n locPattern?: string\n sectionDigits?: number\n unitDigits?: number\n shelfLocations?: string\n stockScale?: number\n hideRackFrame?: boolean\n legendTarget?: string\n hideEmptyStock?: boolean\n widths?: number[]\n heights?: number[]\n}\nimport { RackGridCell } from './rack-grid-cell.js'\nimport { RackGrid3D } from './rack-grid-3d.js'\nimport { increaseLocation } from './rack-grid-location.js'\nimport type { StockMaterialProvider } from './stock.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'rows',\n name: 'rows',\n property: 'rows'\n },\n {\n type: 'number',\n label: 'columns',\n name: 'columns',\n property: 'columns'\n },\n {\n type: 'string',\n label: 'zone',\n name: 'zone',\n property: 'zone'\n },\n {\n type: 'number',\n label: 'shelves',\n name: 'shelves',\n property: 'shelves'\n },\n {\n type: 'number',\n label: 'depth',\n name: 'depth',\n property: 'depth'\n },\n {\n type: 'string',\n label: 'location-pattern',\n name: 'locPattern',\n placeholder: '{z}{s}-{u}-{sh}'\n },\n {\n type: 'number',\n label: 'section-digits',\n name: 'sectionDigits',\n placeholder: '1, 2, 3, ...'\n },\n {\n type: 'number',\n label: 'unit-digits',\n name: 'unitDigits',\n placeholder: '1, 2, 3, ...'\n },\n {\n type: 'string',\n label: 'shelf-locations',\n name: 'shelfLocations',\n placeholder: '1,2,3,... / ,,,04'\n },\n {\n type: 'number',\n label: 'stock-scale',\n name: 'stockScale',\n property: {\n step: 0.01,\n min: 0,\n max: 1\n }\n },\n {\n type: 'checkbox',\n label: 'hide-rack-frame',\n name: 'hideRackFrame'\n },\n {\n type: 'id-input',\n label: 'legend-target',\n name: 'legendTarget',\n property: {\n component: 'legend'\n }\n },\n {\n type: 'checkbox',\n label: 'hide-empty-stock',\n name: 'hideEmptyStock'\n }\n ],\n help: 'scene/component/rack-grid'\n}\n\ntype SIDE_KEY = 'all' | 'out' | 'left' | 'right' | 'top' | 'bottom' | 'leftright' | 'topbottom'\n\nconst SIDES = {\n all: ['top', 'left', 'bottom', 'right'],\n out: ['top', 'left', 'bottom', 'right'],\n left: ['left'],\n right: ['right'],\n top: ['top'],\n bottom: ['bottom'],\n leftright: ['left', 'right'],\n topbottom: ['top', 'bottom']\n} as { [key: string]: SIDE_KEY[] }\n\nconst CLEAR_STYLE = {\n strokeStyle: '',\n lineDash: 'solid',\n lineWidth: 0\n}\n\nconst DEFAULT_STYLE = {\n strokeStyle: '#999',\n lineDash: 'solid',\n lineWidth: 1\n}\n\nconst TABLE_LAYOUT = Layout.get('table')\n\nfunction buildNewCell(app: ApplicationContext) {\n return Model.compile(\n {\n type: 'rack-grid-cell',\n strokeStyle: 'black',\n fillStyle: 'transparent',\n left: 0,\n top: 0,\n width: 1,\n height: 1,\n textWrap: true,\n isEmpty: false,\n border: buildBorderStyle(DEFAULT_STYLE, 'all')\n },\n app\n )\n}\n\nfunction buildCopiedCell(copy: any, app: ApplicationContext) {\n const obj = JSON.parse(JSON.stringify(copy))\n delete obj.text\n\n return Model.compile(obj, app)\n}\n\nfunction buildBorderStyle(style: any, where: SIDE_KEY): { [key: string]: any } {\n return (SIDES[where] || []).reduce((border: { [key: string]: any }, side: string) => {\n border[side] = style\n return border\n }, {} as { [key: string]: any })\n}\n\nfunction setCellBorder(cell: RackGridCell, style: any, where: SIDE_KEY) {\n if (!cell) {\n return\n }\n\n cell.set('border', Object.assign({}, cell.getState('border') || {}, buildBorderStyle(style, where)))\n}\n\nfunction isLeftMost(total: number, columns: number, indices: number[], i: number) {\n return i == 0 || !(i % columns) || indices.indexOf(i - 1) == -1\n}\n\nfunction isRightMost(total: number, columns: number, indices: number[], i: number) {\n return i == total - 1 || i % columns == columns - 1 || indices.indexOf(i + 1) == -1\n}\n\nfunction isTopMost(total: number, columns: number, indices: number[], i: number) {\n return i < columns || indices.indexOf(i - columns) == -1\n}\n\nfunction isBottomMost(total: number, columns: number, indices: number[], i: number) {\n return i > total - columns - 1 || indices.indexOf(i + columns) == -1\n}\n\nfunction above(columns: number, i: number) {\n return i - columns\n}\n\nfunction below(columns: number, i: number) {\n return i + columns\n}\n\nfunction before(columns: number, i: number) {\n return !(i % columns) ? -1 : i - 1\n}\n\nfunction after(columns: number, i: number) {\n return !((i + 1) % columns) ? -1 : i + 1\n}\n\nfunction array(value: any, size: number) {\n const arr = []\n for (let i = 0; i < size; i++) arr.push(1)\n return arr\n}\n\nconst columnControlHandler = {\n ondragmove: function (point: POINT, index: number, component: RackGrid) {\n const { left, top, width, height } = component.textBounds\n const widths_sum = component.widths_sum\n\n const widths = component.widths.slice()\n\n /* ์ปจํŠธ๋กค์˜ ์›๋ž˜ ์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค. */\n const origin_pos_unit = widths.slice(0, index + 1).reduce((sum: number, width: number) => sum + width, 0)\n const origin_offset = left + (origin_pos_unit / widths_sum) * width\n\n /*\n * point์˜ ์ขŒํ‘œ๋Š” ๋ถ€๋ชจ ๋ ˆ์ด์–ด ๊ธฐ์ค€์˜ x, y ๊ฐ’์ด๋‹ค.\n * ๋”ฐ๋ผ์„œ, ๋„ํ˜•์˜ ํšŒ์ „์„ ๊ฐ์•ˆํ•œ ์ขŒํ‘œ๋กœ์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค.\n * Transcoord์‹œ์—๋Š” point์ขŒํ‘œ๊ฐ€ ๋ถ€๋ชจ๊นŒ์ง€ transcoord๋˜์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฏ€๋กœ,\n * ์ปดํฌ๋„ŒํŠธ์ž์‹ ์— ๋Œ€ํ•œ transcoord๋งŒ ํ•„์š”ํ•˜๋‹ค.(๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ).\n */\n const transcoorded = component.transcoordP2S(point.x, point.y)\n const diff = transcoorded.x - origin_offset\n\n let diff_unit = (diff / width) * widths_sum\n\n const min_width_unit = (widths_sum / width) * 5 // 5ํ”ฝ์…€์ •๋„๋ฅผ ์ตœ์†Œ๋กœ\n\n if (diff_unit < 0) diff_unit = -Math.min(widths[index] - min_width_unit, -diff_unit)\n else diff_unit = Math.min(widths[index + 1] - min_width_unit, diff_unit)\n\n widths[index] = Math.round((widths[index] + diff_unit) * 100) / 100\n widths[index + 1] = Math.round((widths[index + 1] - diff_unit) * 100) / 100\n\n component.set('widths', widths)\n }\n}\n\nconst rowControlHandler = {\n ondragmove: function (point: POINT, index: number, component: RackGrid) {\n const { left, top, width, height } = component.textBounds\n const heights_sum = component.heights_sum\n\n const heights = component.heights.slice()\n\n /* ์ปจํŠธ๋กค์˜ ์›๋ž˜ ์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค. */\n index -= component.columns - 1\n const origin_pos_unit = heights.slice(0, index + 1).reduce((sum: number, height: number) => sum + height, 0)\n const origin_offset = top + (origin_pos_unit / heights_sum) * height\n\n /*\n * point์˜ ์ขŒํ‘œ๋Š” ๋ถ€๋ชจ ๋ ˆ์ด์–ด ๊ธฐ์ค€์˜ x, y ๊ฐ’์ด๋‹ค.\n * ๋”ฐ๋ผ์„œ, ๋„ํ˜•์˜ ํšŒ์ „์„ ๊ฐ์•ˆํ•œ ์ขŒํ‘œ๋กœ์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค.\n * Transcoord์‹œ์—๋Š” point์ขŒํ‘œ๊ฐ€ ๋ถ€๋ชจ๊นŒ์ง€ transcoord๋˜์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฏ€๋กœ,\n * ์ปดํฌ๋„ŒํŠธ์ž์‹ ์— ๋Œ€ํ•œ transcoord๋งŒ ํ•„์š”ํ•˜๋‹ค.(๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ).\n */\n const transcoorded = component.transcoordP2S(point.x, point.y)\n const diff = transcoorded.y - origin_offset\n\n let diff_unit = (diff / height) * heights_sum\n\n const min_height_unit = (heights_sum / height) * 5 // 5ํ”ฝ์…€์ •๋„๋ฅผ ์ตœ์†Œ๋กœ\n\n if (diff_unit < 0) diff_unit = -Math.min(heights[index] - min_height_unit, -diff_unit)\n else diff_unit = Math.min(heights[index + 1] - min_height_unit, diff_unit)\n\n heights[index] = Math.round((heights[index] + diff_unit) * 100) / 100\n heights[index + 1] = Math.round((heights[index + 1] - diff_unit) * 100) / 100\n\n component.set('heights', heights)\n }\n}\n\n@sceneComponent('rack-grid')\nexport default class RackGrid extends ContainerAbstract implements StockMaterialProvider {\n override get state(): RackGridState {\n return super.state as RackGridState\n }\n\n _focused_cell?: RackGridCell\n\n // StockMaterialProvider ๊ตฌํ˜„\n _stock_materials: THREE.Material[] = []\n _default_material?: THREE.Material\n _empty_material?: THREE.Material\n private _legendTarget?: Component\n\n get legendTarget(): Component | undefined {\n const { legendTarget } = this.state\n\n if (!this._legendTarget && legendTarget) {\n this._legendTarget = this.root.findById?.(legendTarget)\n this._legendTarget?.on('change', this._onLegendChanged, this)\n }\n\n // ํ•˜์œ„ํ˜ธํ™˜: ์ž์ฒด legendTarget์ด ์—†์œผ๋ฉด ๋ถ€๋ชจ(Visualizer)์˜ legendTarget ํด๋ฐฑ\n if (!this._legendTarget) {\n let ancestor = this.parent as any\n while (ancestor) {\n if (ancestor.legendTarget) return ancestor.legendTarget\n ancestor = ancestor.parent\n }\n // ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํด๋ฐฑ: stock-hub์˜ legendTarget\n const stockHub = (this.root as any)?.getService?.('stock')\n if (stockHub?.legendTarget) return stockHub.legendTarget\n }\n\n return this._legendTarget\n }\n\n get hideEmptyStock(): boolean {\n return !!this.getState('hideEmptyStock')\n }\n\n private _onLegendChanged() {\n this._resetMaterials()\n this.invalidate()\n }\n\n private _resetMaterials() {\n this._stock_materials.forEach(m => m.dispose?.())\n this._stock_materials = []\n delete this._default_material\n delete this._empty_material\n }\n buildRealObject(): RealObject | undefined {\n return new RackGrid3D(this)\n }\n\n dispose() {\n this._legendTarget?.off('change', this._onLegendChanged, this)\n delete this._legendTarget\n this._resetMaterials()\n\n super.dispose()\n\n delete this._focused_cell\n }\n\n created() {\n const tobeSize = this.rows * this.columns\n const gap = this.size() - tobeSize\n\n if (gap == 0) {\n return\n } else if (gap > 0) {\n let removals = this.components.slice(gap)\n this.remove(removals)\n } else {\n let newbies = []\n\n for (let i = 0; i < -gap; i++) newbies.push(buildNewCell(this.app))\n\n this.add(newbies)\n }\n\n const widths = this.getState('widths')\n const heights = this.getState('heights')\n\n if (!widths || widths.length < this.columns) this.set('widths', this.widths)\n if (!heights || heights.length < this.rows) this.set('heights', this.heights)\n }\n\n // ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž„์˜๋กœ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ž„.\n get focusible() {\n return false\n }\n\n get widths(): number[] {\n const widths = this.getState('widths')\n\n if (!widths) return array(1, this.columns)\n\n if (widths.length < this.columns) return widths.concat(array(1, this.columns - widths.length))\n else if (widths.length > this.columns) return widths.slice(0, this.columns)\n\n return widths\n }\n\n get heights(): number[] {\n const heights = this.getState('heights')\n\n if (!heights) return array(1, this.rows)\n\n if (heights.length < this.rows) return heights.concat(array(1, this.rows - heights.length))\n else if (heights.length > this.rows) return heights.slice(0, this.rows)\n\n return heights\n }\n\n buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number) {\n if (newrows < oldrows) {\n let removals = this.components.slice(oldcolumns * newrows)\n this.remove(removals)\n }\n\n const minrows = Math.min(newrows, oldrows)\n\n if (newcolumns > oldcolumns) {\n for (let r = 0; r < minrows; r++) {\n for (let c = oldcolumns; c < newcolumns; c++) {\n this.insertComponentAt(buildNewCell(this.app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n let removals = []\n\n for (let r = 0; r < minrows; r++) {\n for (let c = newcolumns; c < oldcolumns; c++) {\n removals.push(this.components[r * oldcolumns + c])\n }\n }\n this.remove(removals)\n }\n\n if (newrows > oldrows) {\n let newbies = []\n\n for (let r = oldrows; r < newrows; r++) {\n for (let i = 0; i < newcolumns; i++) {\n newbies.push(buildNewCell(this.app))\n }\n }\n this.add(newbies)\n }\n\n this.set({\n widths: this.widths,\n heights: this.heights\n })\n }\n\n get layout(): any {\n return TABLE_LAYOUT\n }\n\n get rows() {\n return this.getState('rows')\n }\n\n setCellsStyle(cells: RackGridCell[], style: any, where: string) {\n const components = this.components\n const total = components.length\n const columns = this.getState('columns')\n\n // ๋ณ‘ํ•ฉ๋œ ์…€๋„ ํฌํ•จ์‹œํ‚จ๋‹ค.\n const _cells = [] as RackGridCell[]\n cells.forEach(c => {\n _cells.push(c)\n if (c.colspan || c.rowspan) {\n let col = this.getRowColumn(c).column\n let row = this.getRowColumn(c).row\n for (let i = row; i < row + c.rowspan; i++)\n for (let j = col; j < col + c.colspan; j++)\n if (i != row || j != col) _cells.push(this.components[i * this.columns + j] as RackGridCell)\n }\n })\n\n const indices = _cells.map(cell => components.indexOf(cell))\n indices.forEach(i => {\n const cell = components[i] as RackGridCell\n\n switch (where) {\n case 'all':\n setCellBorder(cell, style, where)\n\n if (isLeftMost(total, columns, indices, i))\n setCellBorder(components[before(columns, i)] as RackGridCell, style, 'right')\n if (isRightMost(total, columns, indices, i))\n setCellBorder(components[after(columns, i)] as RackGridCell, style, 'left')\n if (isTopMost(total, columns, indices, i))\n setCellBorder(components[above(columns, i)] as RackGridCell, style, 'bottom')\n if (isBottomMost(total, columns, indices, i))\n setCellBorder(components[below(columns, i)] as RackGridCell, style, 'top')\n break\n case 'in':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'out':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)] as RackGridCell, style, 'right')\n }\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)] as RackGridCell, style, 'left')\n }\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)] as RackGridCell, style, 'bottom')\n }\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)] as RackGridCell, style, 'top')\n }\n break\n case 'left':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)] as RackGridCell, style, 'right')\n }\n break\n case 'right':\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)] as RackGridCell, style, 'left')\n }\n break\n case 'center':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n break\n case 'middle':\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'top':\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)] as RackGridCell, style, 'bottom')\n }\n break\n case 'bottom':\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)] as RackGridCell, style, 'top')\n }\n break\n case 'clear':\n setCellBorder(cell, CLEAR_STYLE, 'all')\n\n if (isLeftMost(total, columns, indices, i))\n setCellBorder(components[before(columns, i)] as RackGridCell, CLEAR_STYLE, 'right')\n if (isRightMost(total, columns, indices, i))\n setCellBorder(components[after(columns, i)] as RackGridCell, CLEAR_STYLE, 'left')\n if (isTopMost(total, columns, indices, i))\n setCellBorder(components[above(columns, i)] as RackGridCell, CLEAR_STYLE, 'bottom')\n if (isBottomMost(total, columns, indices, i))\n setCellBorder(components[below(columns, i)] as RackGridCell, CLEAR_STYLE, 'top')\n }\n })\n }\n\n getRowColumn(cell: RackGridCell) {\n const idx = this.components.indexOf(cell)\n\n return {\n column: idx % this.columns,\n row: Math.floor(idx / this.columns)\n }\n }\n\n getCellsByRow(row: number) {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n\n getCellsByColumn(column: number) {\n const cells = []\n for (let i = 0; i < this.rows; i++) cells.push(this.components[this.columns * i + column])\n\n return cells\n }\n\n deleteRows(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ํ–‰์„ ๊ตฌํ•œ๋‹ค.\n let rows = [] as number[]\n\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) {\n rows.push(row)\n }\n })\n\n rows.sort((a, b) => {\n return a - b\n })\n\n rows.reverse()\n\n const heights = this.heights.slice()\n rows.forEach(row => {\n this.remove(this.getCellsByRow(row))\n })\n\n rows.forEach(row => heights.splice(row, 1))\n\n this.model.rows -= rows.length // ๊ณ ์˜์ ์œผ๋กœ, change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก set(..)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.\n this.set('heights', heights)\n }\n\n deleteColumns(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ์—ด์„ ๊ตฌํ•œ๋‹ค.\n let columns = [] as number[]\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n\n columns.forEach(column => {\n const widths = this.widths.slice()\n this.remove(this.getCellsByColumn(column))\n widths.splice(column, 1)\n this.model.columns -= 1 // ๊ณ ์˜์ ์œผ๋กœ, change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก set(..)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.\n this.set('widths', widths)\n })\n }\n\n insertCellsAbove(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ํ–‰์„ ๊ตฌํ•œ๋‹ค.\n let rows = [] as number[]\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n // ํ–‰ 2๊ฐœ ์ด์ƒ์€ ์ถ”๊ฐ€ ์•ˆํ•จ. ์ž„์‹œ๋กœ ๋ง‰์•„๋†“์Œ\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[0]\n let newbieRowHeights = [] as number[]\n let newbieCells = [] as RackGridCell[]\n rows.forEach(row => {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app) as RackGridCell)\n\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += rows.length\n\n this.clearCache()\n })\n }\n\n insertCellsBelow(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ํ–‰์„ ๊ตฌํ•œ๋‹ค.\n let rows = [] as number[]\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n // ํ–‰ 2๊ฐœ ์ด์ƒ์€ ์ถ”๊ฐ€ ์•ˆํ•จ. ์ž„์‹œ๋กœ ๋ง‰์•„๋†“์Œ\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[rows.length - 1] + 1\n let newbieRowHeights = [] as number[]\n let newbieCells = [] as RackGridCell[]\n rows.forEach(row => {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app) as RackGridCell)\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += 1\n\n this.clearCache()\n })\n }\n\n insertCellsLeft(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ์—ด์„ ๊ตฌํ•œ๋‹ค.\n let columns = [] as number[]\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // ์—ด 2๊ฐœ ์ด์ƒ์€ ์ถ”๊ฐ€ ์•ˆํ•จ. ์ž„์‹œ๋กœ ๋ง‰์•„๋†“์Œ\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[0]\n let newbieColumnWidths = [] as number[]\n let newbieCells = [] as RackGridCell[]\n columns.forEach(column => {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app) as RackGridCell)\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // ๊ณ ์˜์ ์œผ๋กœ, change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก set(..)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n\n insertCellsRight(cells: RackGridCell[]) {\n // ๋จผ์ € cells ์œ„์น˜์˜ ์—ด์„ ๊ตฌํ•œ๋‹ค.\n let columns = [] as number[]\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // ์—ด 2๊ฐœ ์ด์ƒ์€ ์ถ”๊ฐ€ ์•ˆํ•จ. ์ž„์‹œ๋กœ ๋ง‰์•„๋†“์Œ\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[columns.length - 1] + 1\n let newbieColumnWidths = [] as number[]\n let newbieCells = [] as RackGridCell[]\n columns.forEach(column => {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app) as RackGridCell)\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // ๊ณ ์˜์ ์œผ๋กœ, change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก set(..)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n\n distributeHorizontal(cells: RackGridCell[]) {\n const columns = [] as number[]\n\n cells.forEach(cell => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == columns.indexOf(rowcolumn.column)) columns.push(rowcolumn.column)\n })\n\n const sum = columns.reduce((sum, column) => {\n return sum + this.widths[column]\n }, 0)\n\n const newval = Math.round((sum / columns.length) * 100) / 100\n const widths = this.widths.slice()\n columns.forEach(column => {\n widths[column] = newval\n })\n\n this.set('widths', widths)\n }\n\n distributeVertical(cells: RackGridCell[]) {\n const rows = [] as number[]\n\n cells.forEach(cell => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == rows.indexOf(rowcolumn.row)) rows.push(rowcolumn.row)\n })\n\n const sum = rows.reduce((sum, row) => {\n return sum + this.heights[row]\n }, 0)\n\n const newval = Math.round((sum / rows.length) * 100) / 100\n const heights = this.heights.slice()\n rows.forEach(row => {\n heights[row] = newval\n })\n\n this.set('heights', heights)\n }\n\n increaseLocation(type: string, skipNumbering: boolean, startSection: number, startUnit: number) {\n const { sectionDigits = 2, unitDigits = 2 } = this.state\n const selectedCells = this.root.selected as RackGridCell[]\n\n increaseLocation(selectedCells, type, skipNumbering, startSection, startUnit, sectionDigits, unitDigits)\n }\n\n get columns() {\n return this.getState('columns')\n }\n\n get lefts() {\n return this.components.filter((c: any, i: any) => {\n return !(i % this.columns)\n })\n }\n\n get centers() {\n return this.components.filter((c: any, i: any) => {\n return i % this.columns && (i + 1) % this.columns\n })\n }\n\n get rights() {\n return this.components.filter((c: any, i: any) => {\n return !((i + 1) % this.columns)\n })\n }\n\n get tops() {\n return this.components.slice(0, this.columns)\n }\n\n get middles() {\n return this.components.slice(this.columns, this.columns * (this.rows - 1))\n }\n\n get bottoms() {\n return this.components.slice(this.columns * (this.rows - 1))\n }\n\n get all() {\n return this.components\n }\n\n get widths_sum() {\n const widths = this.widths\n return widths ? widths.filter((width, i) => i < this.columns).reduce((sum, width) => sum + width, 0) : this.columns\n }\n\n get heights_sum() {\n const heights = this.heights\n return heights ? heights.filter((height, i) => i < this.rows).reduce((sum, height) => sum + height, 0) : this.rows\n }\n\n get nature() {\n return NATURE\n }\n\n get controls(): Array<Control> | undefined {\n const widths = this.widths\n const heights = this.heights\n const inside = this.textBounds\n\n const width_unit = inside.width / this.widths_sum\n const height_unit = inside.height / this.heights_sum\n\n let x = inside.left\n let y = inside.top\n\n const controls: Array<Control> = []\n\n widths.slice(0, this.columns - 1).forEach((width: number) => {\n x += width * width_unit\n controls.push({\n x: x,\n y: inside.top,\n handler: columnControlHandler\n })\n })\n\n heights.slice(0, this.rows - 1).forEach((height: number) => {\n y += height * height_unit\n controls.push({\n x: inside.left,\n y: y,\n handler: rowControlHandler\n })\n })\n\n return controls\n }\n\n onchange(after: Properties, before: Properties) {\n if ('legendTarget' in after || 'legendTarget' in before) {\n this._legendTarget?.off('change', this._onLegendChanged, this)\n delete this._legendTarget\n this._resetMaterials()\n }\n\n if ('rows' in after || 'columns' in after) {\n this.buildCells(\n this.getState('rows'),\n this.getState('columns'),\n before.hasOwnProperty('rows') ? before.rows : this.getState('rows'),\n before.hasOwnProperty('columns') ? before.columns : this.getState('columns')\n )\n }\n\n this.invalidate()\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(descendant)': {\n change: this.oncellchanged\n }\n }\n }\n }\n\n oncellchanged(after: Properties, before: Properties) {\n this.invalidate()\n }\n}\n\n;['rows', 'columns', 'widths', 'heights', 'widths_sum', 'heights_sum', 'controls'].forEach(getter =>\n Component.memoize(RackGrid.prototype, getter, false)\n)\n"]}
1
+ {"version":3,"file":"rack-grid.js","sourceRoot":"","sources":["../src/rack-grid.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n *\n * RackGrid โ€” *grid layout ์˜ ์ปจํ…Œ์ด๋„ˆ*.\n *\n * ๊ฐ (col, row) ์œ„์น˜๋งˆ๋‹ค *ํ•˜๋‚˜์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ* ๋ณด์œ  ๊ฐ€๋Šฅ:\n * - StorageRack (ํ•œ column ์˜ vertical stack โ€” stock ๋ณด๊ด€)\n * - Crane / AGV / forklift / ๋ฏธ๋‹ˆ๋กœ๋“œ ๋“ฑ *operation archetype* (์ด๋™/์ž‘์—… ์„ค๋น„)\n * - ๋˜๋Š” ๋น„์–ด ์žˆ์Œ (= ํ†ต๋กœ / ์ž‘์—…์ž ๊ณต๊ฐ„ / ๋ฌด์—‡์ด๋“ )\n *\n * ์™ธ๋ถ€์—๋Š” *location string* (์˜ˆ: \"Z-A01-03-1\") ์œผ๋กœ API ๋…ธ์ถœ. ๋‚ด๋ถ€ cellId ์™€ ์–‘๋ฐฉํ–ฅ\n * ๋ณ€ํ™˜์€ RackGrid ๊ฐ€ ์ฑ…์ž„.\n *\n * **Performance** โ€” ๊ฐ ์ž์‹ StorageRack ์ด ์ž์ฒด InstancedMesh ๋กœ stock ๋ Œ๋”๋ง.\n * storage-rack ์˜ batched ์‹œ๊ฐํ™” ์„ฑ๋Šฅ ๊ทธ๋Œ€๋กœ ๊ณ„์Šน. RackGrid ๋Š” *์–‡์€ wrapper*.\n *\n * **Transfer ์ปจํŠธ๋ž™** โ€” SlottedHolder ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„. ๋‚ด๋ถ€์ ์œผ๋กœ *์ž์‹ StorageRack*\n * ์œผ๋กœ ์œ„์ž„. Mover / Crane ๋“ฑ์ด *RackGrid ์˜ slot target* ์œผ๋กœ ์ธํ„ฐ๋ž™ํŠธ ๊ฐ€๋Šฅ.\n *\n * **Configuration ์ƒ์‚ฐ์„ฑ** โ€” rack-table ์˜ *location ๋ฃฐ* (locPattern, sectionDigits ๋“ฑ)\n * ์ฐจ์šฉ. cell-component ์—†์ด *sparse cellOverrides* ๋งŒ์œผ๋กœ ๋™์ผ UX ์ œ๊ณต.\n *\n * **Aisle/Empty** โ€” `cellOverrides[posKey].isEmpty = true` ๋กœ ๋ช…์‹œ. ์˜๋ฏธ๋Š”\n * *location ๋ฏธ๋ถ€์—ฌ + increaseLocation ์˜ aisle row ์ธ์‹* ๋งŒ. ๊ทธ ์œ„์น˜์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ\n * ์ข…๋ฅ˜๋Š” *์ž์œ * (Crane/AGV/forklift/๊ทธ๋ƒฅ ๋น„์›€ ๋ชจ๋‘ ๊ฐ€๋Šฅ).\n *\n * **CellId ์ปจ๋ฒค์…˜** (๋‚ด๋ถ€):\n * - posKey = `${col-1}-${row-1}` (0-based, 2 segments) โ€” *grid ํ‰๋ฉด ์œ„์น˜*\n * - cellId = `${col-1}-${row-1}-${shelf-1}` (0-based, 3 segments) โ€” *grid + shelf*\n * - ์ž์‹ StorageRack ๋‚ด๋ถ€์—์„œ๋Š” `0-0-${shelf-1}` (์ž์ฒด cellId ํ˜•์‹). RackGrid ๊ฐ€ ๋ณ€ํ™˜.\n */\nimport {\n ApplicationContext, Component, ComponentNature, ContainerAbstract, Control, Layout,\n Model, POINT, Properties, RealObject, sceneComponent\n} from '@hatiolab/things-scene'\nimport type { State } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\nimport {\n Placeable,\n SlotTarget,\n type Alignment,\n type Heights,\n type PlacementArchetype,\n type SlotRecord,\n type SlottedHolder\n} from '@operato/scene-base'\n\nimport StorageRack from './storage-rack.js'\nimport RackGridCell from './rack-grid-cell.js'\nimport { RackGrid3D } from './rack-grid-3d.js'\n\n// RackGridCell ์˜ refid ์ถฉ๋Œ ํšŒํ”ผ โ€” load ์‹œ ๋™์  ์ƒ์„ฑ๋˜๋Š” cell ์˜ refid ๊ฐ€ *๋ถ€๋ชจ\n// RackGrid + ๋ชจ๋ธ ์•ˆ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ* refid ์™€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก *๋†’์€ ์‹œ์ž‘๊ฐ’ + monotonic\n// counter*. hierarchy override ๊ฐ€ save ์‹œ refid ์ œ๊ฑฐ โ†’ ๋ชจ๋ธ ํŒŒ์ผ์—” ์•ˆ ์ƒˆ๊ฒจ์ง.\nlet _cellRefidCounter = 100_000_000\nfunction _nextCellRefid(): number {\n return _cellRefidCounter++\n}\n\nfunction buildNewCell(app: ApplicationContext) {\n const refid = _nextCellRefid()\n const m: any = Model.compile(\n {\n type: 'rack-grid-cell',\n refid,\n left: 0, top: 0, width: 1, height: 1, isEmpty: false\n },\n app\n )\n // Model.compile ์ด refid ๋ฅผ ์ž๋™ generator ๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์–ด *๊ฐ•์ œ ์žฌ set*.\n try {\n if (m.refid !== refid) {\n m.refid = refid\n m.state && (m.state.refid = refid)\n m._state && (m._state.refid = refid)\n }\n } catch {}\n return m\n}\n\nconst TABLE_LAYOUT = Layout.get('table')\n\nfunction arrayOf(value: number, size: number): number[] {\n const arr: number[] = []\n for (let i = 0; i < size; i++) arr.push(value)\n return arr\n}\n\nconst columnControlHandler = {\n ondragmove(point: POINT, index: number, component: RackGrid) {\n const { left, top, width, height } = component.textBounds\n const widths_sum = component.widths_sum\n const widths = component.widths.slice()\n\n const origin_pos_unit = widths.slice(0, index + 1).reduce((sum, w) => sum + w, 0)\n const origin_offset = left + (origin_pos_unit / widths_sum) * width\n\n const transcoorded = component.transcoordP2S(point.x, point.y)\n const diff = transcoorded.x - origin_offset\n\n let diff_unit = (diff / width) * widths_sum\n const min_width_unit = (widths_sum / width) * 5\n\n if (diff_unit < 0) diff_unit = -Math.min(widths[index] - min_width_unit, -diff_unit)\n else diff_unit = Math.min(widths[index + 1] - min_width_unit, diff_unit)\n\n widths[index] = Math.round((widths[index] + diff_unit) * 100) / 100\n widths[index + 1] = Math.round((widths[index + 1] - diff_unit) * 100) / 100\n\n component.set('widths', widths)\n }\n}\n\nconst rowControlHandler = {\n ondragmove(point: POINT, index: number, component: RackGrid) {\n const { left, top, width, height } = component.textBounds\n const heights_sum = component.heights_sum\n const heights = component.heights.slice()\n\n index -= component.columns - 1\n const origin_pos_unit = heights.slice(0, index + 1).reduce((sum, h) => sum + h, 0)\n const origin_offset = top + (origin_pos_unit / heights_sum) * height\n\n const transcoorded = component.transcoordP2S(point.x, point.y)\n const diff = transcoorded.y - origin_offset\n\n let diff_unit = (diff / height) * heights_sum\n const min_height_unit = (heights_sum / height) * 5\n\n if (diff_unit < 0) diff_unit = -Math.min(heights[index] - min_height_unit, -diff_unit)\n else diff_unit = Math.min(heights[index + 1] - min_height_unit, diff_unit)\n\n heights[index] = Math.round((heights[index] + diff_unit) * 100) / 100\n heights[index + 1] = Math.round((heights[index + 1] - diff_unit) * 100) / 100\n\n component.set('heights', heights)\n }\n}\n\n// โ”€โ”€โ”€ Cell-level metadata (sparse override) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n/** ํ•œ (col, row) ์œ„์น˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ. ๋ช…์‹œ๋˜์ง€ ์•Š์€ ์œ„์น˜๋Š” *๋ฃฐ์˜ ๊ธฐ๋ณธ๊ฐ’* ์ ์šฉ (= location ์—†์Œ). */\nexport interface CellOverride {\n /** Location ์˜ `{s}` ๋ถ€๋ถ„. unit ๊ณผ ํ•จ๊ป˜ ๋ช…์‹œ๋˜์–ด์•ผ location ๋ถ€์—ฌ๋จ. */\n section?: string\n /** Location ์˜ `{u}` ๋ถ€๋ถ„. section ๊ณผ ํ•จ๊ป˜ ๋ช…์‹œ๋˜์–ด์•ผ location ๋ถ€์—ฌ๋จ. */\n unit?: string\n /**\n * ๋ช…์‹œ์  ํ†ต๋กœ/๊ณต์‹ค ํ‘œ์‹œ. ์˜๋ฏธ:\n * - location ๋ฏธ๋ถ€์—ฌ (์ด cell ๋กœ๋Š” ์™ธ๋ถ€ location key ๋งค์นญ ๋ถˆ๊ฐ€)\n * - increaseLocation ์˜ aisle row ๋กœ ์ธ์‹ (skipNumbering ์‹œ ๊ฑด๋„ˆ๋œ€)\n * ์ž์‹ ์ปดํฌ๋„ŒํŠธ ์ข…๋ฅ˜๋Š” ๋ฌด๊ด€ โ€” Crane/AGV/forklift/๋น„์›€ ๋ชจ๋‘ OK.\n */\n isEmpty?: boolean\n /** 4-side border style (top/left/bottom/right) โ€” modeling ์‹œ๊ฐ ์šฉ. */\n border?: any\n /** Grid merge โ€” ์‹œ๊ฐ ํ‘œํ˜„. */\n merged?: boolean\n rowspan?: number\n colspan?: number\n}\n\n// โ”€โ”€โ”€ State โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface RackGridState extends State {\n /** Grid ๊ฐ€๋กœ ์นธ ์ˆ˜ (X ์ถ•). ๊ฐ ์นธ โ‰ˆ 1 column ์˜ StorageRack (๋˜๋Š” Crane ๋“ฑ). */\n columns?: number\n /** Grid ์„ธ๋กœ ์นธ ์ˆ˜ (Z ์ถ•, depth). ํ†ต์ƒ 1, double-deep rack ๋“ฑ์€ 2. */\n rows?: number\n /** ๊ฐ (col, row) ์˜ ์ˆ˜์ง shelf ์ˆ˜ (Y ์ถ•, level). ์ž์‹ StorageRack ์˜ levels ์™€ ์ผ์น˜. */\n shelves?: number\n\n /**\n * ์ฒซ shelf ์˜ ์‹œ์ž‘ ๋†’์ด (mm, 3D Y ์ถ•, ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ). ๋ฏธ๋ช…์‹œ 0 (๋ฐ”๋‹ฅ = ์ฒซ shelf).\n * ์–‘์ˆ˜ ์‹œ ๊ทธ๋งŒํผ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€ *stocker port / conveyor ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋นˆ ๊ณต๊ฐ„*\n * ํ™•๋ณด. Frame uprights ๋Š” ๋ฐ”๋‹ฅ ~ ์ฒœ์žฅ ๊ทธ๋Œ€๋กœ.\n */\n shelfBaseHeight?: number\n\n // โ”€โ”€ Location ๋ฃฐ (rack-table ์ปจ๋ฒค์…˜) โ”€โ”€\n zone?: string\n /** ๊ธฐ๋ณธ `'{z}{s}-{u}-{sh}'`. placeholders: {z} {s} {u} {sh}. */\n locPattern?: string\n /** Section ์ˆซ์ž ์ž๋ฆฌ์ˆ˜ (zero-pad). ๊ธฐ๋ณธ 2. */\n sectionDigits?: number\n /** Unit ์ˆซ์ž ์ž๋ฆฌ์ˆ˜ (zero-pad). ๊ธฐ๋ณธ 2. */\n unitDigits?: number\n /** Shelf label CSV. ์˜ˆ: '1,2,3' / ',,,04'. ๋นˆ ์ž๋ฆฌ๋Š” 1-based ์ธ๋ฑ์Šค default. */\n shelfLocations?: string\n\n /** Sparse cell metadata. key = posKey = `${col-1}-${row-1}` (0-based, 2 segments). */\n cellOverrides?: { [posKey: string]: CellOverride }\n\n /**\n * Stock records โ€” `{ cellId: 'col-row-shelf', type, ... }`. cellId ๊ฐ€ RackGrid ์˜\n * cell ์œ„์น˜ (3 segments) ์™€ ๋งค์นญ๋˜๋Š” record ๋งŒ InstancedMesh instance ๋กœ ๋ Œ๋”๋ง.\n * Plan A ์ •์‹  โ€” sparse ๋ฐ์ดํ„ฐ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ ์—†์ด batched ์‹œ๊ฐํ™”.\n */\n data?: Array<{ cellId: string; [key: string]: any }>\n\n /**\n * Popup ์ปดํฌ๋„ŒํŠธ id โ€” ํด๋ฆญ ์‹œ ๊ทธ popup ์„ invoke (anchor = ํด๋ฆญ๋œ cell ์˜ SlotTarget).\n * ๋ฏธ๋ช…์‹œ ์‹œ click event (`rack-grid-cell-click`) ๋งŒ emit.\n */\n popupRef?: string\n\n // โ”€โ”€ ์‹œ๊ฐํ™” ์˜ต์…˜ โ”€โ”€\n hideRackFrame?: boolean // post + beam ๋ชจ๋‘ ์ˆจ๊น€\n hideHorizontalFrame?: boolean // ๊ฐ€๋กœ frame (beam) ๋งŒ ์ˆจ๊น€ (post ์œ ์ง€)\n legendTarget?: string\n hideEmptyStock?: boolean\n widths?: number[]\n heights?: number[]\n}\n\n// โ”€โ”€โ”€ Nature โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n//\n// `nature` ๋Š” *static const* ๊ฐ€ ์•„๋‹ˆ๋ผ *get nature()* โ€” properties ์˜ widget event\n// handler ์•ˆ `this` ๊ฐ€ *ํ•ด๋‹น RackGrid ์ธ์Šคํ„ด์Šค* ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€\n// getter ์˜ `this` ๋ฅผ capture). rack-table-cell ์˜ ๋™์ผ ํŒจํ„ด.\n\n// โ”€โ”€โ”€ RackGrid โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n@sceneComponent('rack-grid')\nexport default class RackGrid\n extends Placeable(ContainerAbstract)\n implements SlottedHolder\n{\n declare state: RackGridState\n\n static placement: PlacementArchetype = 'floor'\n static align: Alignment = 'bottom'\n static defaultDepth = (h: Heights) => h.ceiling - h.floor\n\n get nature(): ComponentNature {\n return {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n { type: 'number', label: 'columns', name: 'columns' },\n { type: 'number', label: 'rows', name: 'rows' },\n { type: 'number', label: 'shelves', name: 'shelves' },\n { type: 'number', label: 'shelf-base-height', name: 'shelfBaseHeight' },\n { type: 'string', label: 'zone', name: 'zone' },\n { type: 'string', label: 'location-pattern', name: 'locPattern', placeholder: '{z}{s}-{u}-{sh}' },\n { type: 'number', label: 'section-digits', name: 'sectionDigits' },\n { type: 'number', label: 'unit-digits', name: 'unitDigits' },\n { type: 'string', label: 'shelf-locations', name: 'shelfLocations', placeholder: '1,2,3 ๋˜๋Š” ,,,04' },\n {\n // root.selected ์˜ RackGridCell ๋“ค ๋˜๋Š” *์ „์ฒด grid* ์— ์ฑ„๋ฒˆ ์ ์šฉ.\n type: 'location-increase-pattern',\n label: '',\n name: '',\n property: {\n event: {\n 'increase-location-pattern': (event: CustomEvent) => {\n const { increasingDirection, skipNumbering, startSection, startUnit } = event.detail\n const selected = (this.root as any)?.selected as RackGridCell[] | undefined\n const keys = (selected || [])\n .filter(c => (c as any)?.state?.type === 'rack-grid-cell')\n .map(c => c.state.cellId)\n .filter((k): k is string => !!k)\n this.increaseLocation(keys, increasingDirection, skipNumbering, startSection, startUnit)\n }\n }\n }\n },\n { type: 'checkbox', label: 'hide-rack-frame', name: 'hideRackFrame' },\n { type: 'checkbox', label: 'hide-horizontal-frame', name: 'hideHorizontalFrame' },\n { type: 'id-input', label: 'legend-target', name: 'legendTarget', property: { component: 'legend' } },\n { type: 'checkbox', label: 'hide-empty-stock', name: 'hideEmptyStock' },\n { type: 'id-input', label: 'popup-ref', name: 'popupRef', property: { component: 'popup' } }\n ],\n help: 'scene/component/rack-grid'\n }\n }\n\n get anchors() {\n return []\n }\n\n /**\n * Serialize ์‹œ ์ž์‹ RackGridCell ์˜ redundant ์†์„ฑ ์ œ๊ฑฐ:\n * - ์ขŒํ‘œ/๋ณ€ํ™˜ (left/top/width/height/zPos/rotation/scale/translate) โ€” table layout ์ด\n * runtime ์— ์ž๋™ ๊ฒฐ์ •. state ์ €์žฅํ•˜๋ฉด layout ๊ฒฐ๊ณผ์™€ ๋ถˆ์ผ์น˜ ์œ„ํ—˜.\n * - **refid** โ€” *๋™์  ์ƒ์„ฑ* ๋˜๋Š” ์ž์‹์ด๋ผ *๋ถ€๋ชจ์˜ refid ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์ถฉ๋Œ*\n * (\"Refid Index replaced\" ๊ฒฝ๊ณ ). ์ž์‹์˜ refid ๋Š” *load ์‹œ ์ƒˆ๋กœ ์ž๋™ ๋ถ€์—ฌ*. (์™ธ๋ถ€\n * ์ฐธ์กฐ์šฉ *id* ๋Š” ์‚ฌ์šฉ์ž ๋ช…์‹œ ์‹œ๋งŒ ์œ ์ง€)\n *\n * ์œ ์ง€: cellId, section, unit, isEmpty, border, shelfLocations ๋“ฑ *own ๋ฐ์ดํ„ฐ*.\n */\n get hierarchy(): any {\n const base: any = super.hierarchy\n if (base?.components && Array.isArray(base.components)) {\n base.components = base.components.map((c: any) => {\n if (!c || typeof c !== 'object') return c\n const { left, top, width, height, zPos, rotation, scale, translate, refid, ...rest } = c\n return rest\n })\n }\n return base\n }\n\n /** Focusible โ€” children (RackGridCell) ๋„ editor ์˜ selection ๊ฐ€๋Šฅ (rack-table ๋™์ผ). */\n get focusible() {\n return false\n }\n\n /** Lifecycle โ€” children ์ž๋™ ์ƒ์„ฑ. columns ร— rows ๋งŒํผ RackGridCell ์ž์‹. */\n created() {\n const tobeSize = this.columns * this.rackRows\n const gap = ((this as any).size?.() ?? this.components.length) - tobeSize\n\n if (gap === 0) {\n // ์ž์‹ ์ˆ˜๋Š” ๋งž์Œ โ€” cellId ๋งŒ sync\n this._syncChildCellIds()\n return\n } else if (gap > 0) {\n ;(this as any).remove?.(this.components.slice(gap))\n } else {\n const newbies: any[] = []\n for (let i = 0; i < -gap; i++) newbies.push(buildNewCell((this as any).app))\n ;(this as any).add?.(newbies)\n }\n\n const widths = this.getState('widths')\n const heights = this.getState('heights')\n if (!widths || (widths as number[]).length < this.columns) this.set('widths', this.widths)\n if (!heights || (heights as number[]).length < this.rackRows) this.set('heights', this.heights)\n\n this._syncChildCellIds()\n }\n\n /** columns/rows ๋ณ€๊ฒฝ ์‹œ children ์žฌ๊ตฌ์„ฑ. rack-table.buildCells ํŒจํ„ด. */\n onchange(after: Properties, _before: Properties) {\n super.onchange?.(after, _before)\n if ('columns' in after || 'rows' in after) {\n const oldCols = (_before as any).columns ?? this.columns\n const oldRows = (_before as any).rows ?? this.rackRows\n this._buildCells(this.rackRows, this.columns, oldRows, oldCols)\n }\n // ๋ฃฐ ๊ด€๋ จ ๋ณ€๊ฒฝ โ†’ location ์—ญ์ธ๋ฑ์Šค ๋ฌดํšจํ™”\n if ('locPattern' in after || 'sectionDigits' in after || 'unitDigits' in after ||\n 'shelfLocations' in after || 'zone' in after || 'shelves' in after) {\n this.invalidateLocationIndex()\n }\n // stock ์‹œ๊ฐ ์˜ํ–ฅ ์†์„ฑ โ†’ InstancedMesh ์žฌ๋นŒ๋“œ\n if ('data' in after || 'hideEmptyStock' in after || 'shelves' in after ||\n 'shelfBaseHeight' in after || 'width' in after || 'depth' in after ||\n 'height' in after || 'columns' in after || 'rows' in after) {\n ;(this._realObject as any)?.rebuildStockMesh?.()\n }\n // hideRackFrame / hideHorizontalFrame ๋ณ€๊ฒฝ โ†’ frame visibility ์ฆ‰์‹œ ํ† ๊ธ€\n if ('hideRackFrame' in after || 'hideHorizontalFrame' in after) {\n ;(this._realObject as any)?.applyFrameVisibility?.()\n }\n }\n\n /** state.data ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœ (things-scene ์˜ onchange<PropName>). */\n onchangeData(): void {\n ;(this._realObject as any)?.rebuildStockMesh?.()\n }\n\n /** state.data ์˜ records โ€” Plan A ์˜ stock ๋ณด๊ด€์†Œ. */\n get records(): Array<{ cellId: string; [key: string]: any }> {\n return (this.state.data as any) ?? []\n }\n\n // โ”€โ”€ Legend integration โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n private _legendTarget?: Component\n\n /**\n * Legend ์ปดํฌ๋„ŒํŠธ lookup. ์šฐ์„ ์ˆœ์œ„:\n * 1) state.legendTarget id ๋ช…์‹œ\n * 2) scene ์ „์ฒด ์˜ type='legend' ์ฒซ ๋ฒˆ์งธ ์ปดํฌ๋„ŒํŠธ (์ž๋™ ๋ฐœ๊ฒฌ)\n */\n get legendTarget(): Component | undefined {\n if (this._legendTarget) return this._legendTarget\n\n const id = this.state.legendTarget\n if (id) {\n const found = (this.root as any)?.findById?.(id) as Component | undefined\n if (found) {\n this._legendTarget = found\n ;(found as any).on?.('change', this._onLegendChanged, this)\n return found\n }\n }\n\n const visit = (node: any): Component | undefined => {\n if (!node) return undefined\n if (node.state?.type === 'legend') return node as Component\n const children = node.components as Component[] | undefined\n if (children) {\n for (const c of children) {\n const r = visit(c)\n if (r) return r\n }\n }\n return undefined\n }\n const found = visit(this.root)\n if (found) {\n this._legendTarget = found\n ;(found as any).on?.('change', this._onLegendChanged, this)\n }\n return found\n }\n\n private _onLegendChanged = (): void => {\n ;(this._realObject as any)?.rebuildStockMesh?.()\n }\n\n /**\n * record ์˜ legend.field ๊ฐ’์„ ranges ์™€ ๋งค์นญํ•ด ์ƒ‰์ƒ ํ•ด์„.\n * - `range.value === recordValue` (์นดํ…Œ๊ณ ๋ฆฌ ์ผ์น˜)\n * - `range.min โ‰ค Number(v) < range.max` (์ˆ˜์น˜ ๋ฒ”์œ„)\n * - ๋งค์นญ ์—†์œผ๋ฉด `defaultColor` ๋˜๋Š” undefined\n */\n // โ”€โ”€ View-mode click โ†’ rack-grid-cell-click event + popup โ”€โ”€\n\n get eventMap() {\n return {\n '(self)': {\n '(self)': {\n click: this._onViewClick\n }\n }\n }\n }\n\n private _onViewClick = (mouseEvent: MouseEvent) => {\n if (!(this as any).app?.isViewMode) return\n const ro: any = (this as any)._realObject\n if (!ro?.object3d) return\n\n const hit = this._raycastHit(mouseEvent)\n if (!hit) return\n\n const stockMesh: THREE.InstancedMesh | undefined = ro.stockMesh\n let cellId: string | undefined\n let record: any\n let isStock = false\n let instanceId: number | undefined\n\n if (hit.object === stockMesh) {\n const records: any[] | undefined = (stockMesh as any).userData?._records\n record = records?.[hit.instanceId ?? -1]\n cellId = record?.cellId\n isStock = true\n instanceId = hit.instanceId\n } else {\n const cid = this._cellIdFromWorldPoint(hit.point)\n if (!cid || cid.startsWith('out-of-bounds')) return\n cellId = cid\n const data = this.state.data as Array<any> | undefined\n record = Array.isArray(data) ? data.find(r => r?.cellId === cid) : undefined\n }\n\n const payload = { cellId, record, hitPoint: hit.point, instanceId, isStock }\n this.trigger('rack-grid-cell-click', payload)\n this._invokePopup(cellId, record)\n\n // popup ์™ธ๋ถ€ click ์œผ๋กœ ์ธ์‹๋˜์–ด ์ž๋™ close ๋˜๋Š” ํšŒ๊ท€ ์ฐจ๋‹จ\n mouseEvent.stopPropagation?.()\n }\n\n /** state.popupRef Popup ์ปดํฌ๋„ŒํŠธ invoke. anchor = ํด๋ฆญ๋œ cell ์˜ SlotTarget. */\n private _invokePopup(cellId: string | undefined, record: any): void {\n const popupRefId = this.state.popupRef\n if (!popupRefId || !cellId) return\n const popupComp: any = (this.root as any)?.findById?.(popupRefId)\n if (!popupComp || typeof popupComp.openPopup !== 'function') {\n console.warn(`[rack-grid] popupRef=\"${popupRefId}\" ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปดํฌ๋„ŒํŠธ ์—†๊ฑฐ๋‚˜ openPopup ๋ฏธ์ง€์›`)\n return\n }\n const anchor = this.slotTargetAt(cellId)\n popupComp.openPopup(record ?? { cellId }, { anchor })\n }\n\n /** raycast โ†’ ์šฐ๋ฆฌ RackGrid ์˜ ์–ด๋–ค mesh ๊ฐ€ closest hit ์ธ์ง€. */\n private _raycastHit(mouseEvent: MouseEvent): THREE.Intersection | undefined {\n const ro: any = (this as any)._realObject\n if (!ro?.object3d) return undefined\n const tc: any = ro.threeContainer\n if (!tc) return undefined\n\n const cap: any = tc._threeCapability ?? tc._capability\n let intersects: THREE.Intersection[] | undefined\n if (cap?.getObjectsByRaycast) {\n intersects = cap.getObjectsByRaycast() as THREE.Intersection[] | undefined\n }\n\n if (!intersects || intersects.length === 0) {\n const scene = tc.scene3d as THREE.Scene | undefined\n const renderer = tc.renderer3d as THREE.WebGLRenderer | undefined\n const camera =\n (tc.activeCamera3d as THREE.Camera | undefined) ??\n (cap?.activeCamera as THREE.Camera | undefined) ??\n (cap?.camera as THREE.Camera | undefined)\n const canvas = renderer?.domElement\n if (!scene || !canvas || !camera) return undefined\n const rect = canvas.getBoundingClientRect()\n if (rect.width === 0 || rect.height === 0) return undefined\n const ndc = new THREE.Vector2(\n ((mouseEvent.clientX - rect.left) / rect.width) * 2 - 1,\n -((mouseEvent.clientY - rect.top) / rect.height) * 2 + 1\n )\n const raycaster = new THREE.Raycaster()\n raycaster.setFromCamera(ndc, camera)\n intersects = raycaster.intersectObjects(scene.children, true)\n }\n if (!intersects || intersects.length === 0) return undefined\n\n const closest = intersects[0]\n let obj: THREE.Object3D | null = closest.object\n while (obj) {\n if (obj.userData?.context === ro) return closest\n obj = obj.parent\n }\n return undefined\n }\n\n /** world point โ†’ cellId (col-row-shelf) ์—ญ์‚ฐ. */\n private _cellIdFromWorldPoint(worldPoint: THREE.Vector3): string | null {\n const ro: any = (this as any)._realObject\n if (!ro?.object3d) return null\n\n const local = new THREE.Vector3().copy(worldPoint)\n const mInv = new THREE.Matrix4().copy(ro.object3d.matrixWorld).invert()\n local.applyMatrix4(mInv)\n\n const cols = this.columns\n const rows = this.rackRows\n const shelves = this.shelves\n const width = (this.state.width as number) || 1000\n const height = (this.state.depth as number) || 2000 // 3D Y\n const depth = (this.state.height as number) || 200 // 3D Z\n const shelfBase = (this.state.shelfBaseHeight as number) || 0\n const shelfZone = height - shelfBase\n\n const bayW = width / cols\n const bayD = depth / rows\n const cellY = shelfZone / shelves\n\n // center-based: X [-width/2, +width/2], Y [-height/2, +height/2], Z [-depth/2, +depth/2]\n const col = Math.floor((local.x + width / 2) / bayW)\n const yFromBottom = local.y + height / 2 - shelfBase\n const shelf = Math.floor(yFromBottom / cellY)\n const row = Math.floor((local.z + depth / 2) / bayD)\n\n if (col < 0 || col >= cols || row < 0 || row >= rows || shelf < 0 || shelf >= shelves) {\n return `out-of-bounds(col=${col},row=${row},shelf=${shelf})`\n }\n return `${col}-${row}-${shelf}`\n }\n\n resolveLegendColor(record: any): string | undefined {\n const legend = this.legendTarget\n if (!legend) return undefined\n const status: any = (legend as any).getState?.('status') ?? (legend.state as any)?.status\n if (!status) return undefined\n\n const field = status.field as string | undefined\n const ranges = status.ranges as any[] | undefined\n if (!field || !Array.isArray(ranges)) return undefined\n\n const value = record?.[field]\n if (value === undefined || value === null) return status.defaultColor\n\n for (const range of ranges) {\n if (!range) continue\n if (range.value !== undefined) {\n if (range.value === value) return range.color\n continue\n }\n const num = Number(value)\n if (!Number.isFinite(num)) continue\n const min = range.min !== undefined && range.min !== '' ? Number(range.min) : undefined\n const max = range.max !== undefined && range.max !== '' ? Number(range.max) : undefined\n const minOk = min === undefined || num >= min\n const maxOk = max === undefined || num < max\n if (minOk && maxOk) return range.color\n }\n return status.defaultColor as string | undefined\n }\n\n /**\n * ์ƒˆ (rows ร— columns) ์— ๋งž์ถฐ children ์žฌ๊ตฌ์„ฑ. rack-table.buildCells ์ •ํ™• ํด๋ก .\n */\n private _buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number) {\n const app = (this as any).app\n if (newrows < oldrows) {\n const removals = this.components.slice(oldcolumns * newrows)\n ;(this as any).remove?.(removals)\n }\n const minrows = Math.min(newrows, oldrows)\n if (newcolumns > oldcolumns) {\n for (let r = 0; r < minrows; r++) {\n for (let c = oldcolumns; c < newcolumns; c++) {\n ;(this as any).insertComponentAt?.(buildNewCell(app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n const removals: any[] = []\n for (let r = 0; r < minrows; r++) {\n for (let c = newcolumns; c < oldcolumns; c++) {\n removals.push(this.components[r * oldcolumns + c])\n }\n }\n ;(this as any).remove?.(removals)\n }\n if (newrows > oldrows) {\n const newbies: any[] = []\n for (let r = oldrows; r < newrows; r++) {\n for (let i = 0; i < newcolumns; i++) newbies.push(buildNewCell(app))\n }\n ;(this as any).add?.(newbies)\n }\n this.set({ widths: this.widths, heights: this.heights })\n this._syncChildCellIds()\n }\n\n /** children ์˜ state.cellId ๊ฐ€ *์ˆœ์„œ ๊ธฐ๋ฐ˜ bayKey* ์™€ ์ผ์น˜ํ•˜๋„๋ก ๋™๊ธฐํ™”. */\n private _syncChildCellIds() {\n const cols = this.columns\n const children = this.components\n for (let i = 0; i < children.length; i++) {\n const col = i % cols\n const row = Math.floor(i / cols)\n const bayKey = `${col}-${row}`\n const c: any = children[i]\n if (c?.state?.cellId !== bayKey) c?.set?.('cellId', bayKey)\n }\n }\n\n /** Row ์ธ๋ฑ์Šค์˜ cell ๋“ค. rack-table-cell ์˜ rowCells ๊ฐ€ ์‚ฌ์šฉ. */\n getCellsByRow(row: number): Component[] {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n /** Column ์ธ๋ฑ์Šค์˜ cell ๋“ค. */\n getCellsByColumn(column: number): Component[] {\n const out: Component[] = []\n for (let i = 0; i < this.rackRows; i++) out.push(this.components[this.columns * i + column])\n return out\n }\n\n /** (col, row) ์œ„์น˜์˜ cell-component. */\n cellAt(col: number, row: number = 0): RackGridCell | null {\n const idx = row * this.columns + col\n return (this.components[idx] as any) ?? null\n }\n\n /** bayKey ์˜ cell-component. */\n cellAtBayKey(bayKey: string): RackGridCell | null {\n const parsed = this.parsePosKey(bayKey)\n if (!parsed) return null\n return this.cellAt(parsed.col, parsed.row)\n }\n\n /**\n * (col, row) bay ๊ฐ€ *isEmpty* ์ธ๊ฐ€. cell-component ์˜ state.isEmpty ๊ฐ€ source of\n * truth, ์—†์œผ๋ฉด cellOverrides[posKey].isEmpty fallback.\n */\n isBayEmpty(col: number, row: number = 0): boolean {\n const cell = this.cellAt(col, row)\n if (cell) return !!cell.state.isEmpty\n const posKey = `${col}-${row}`\n return !!this.cellOverrides[posKey]?.isEmpty\n }\n\n buildRealObject(): RealObject | undefined {\n return new RackGrid3D(this)\n }\n\n // โ”€โ”€ Table layout โ€” ์ž์‹ ์ž๋™ ๋ฐฐ์น˜ + columns/rows ์˜ ๊ฐ€๋ณ€ widths/heights โ”€โ”€\n\n get layout(): any {\n return TABLE_LAYOUT\n }\n\n get widths(): number[] {\n const widths = this.getState('widths') as number[] | undefined\n if (!widths) return arrayOf(1, this.columns)\n if (widths.length < this.columns) return widths.concat(arrayOf(1, this.columns - widths.length))\n if (widths.length > this.columns) return widths.slice(0, this.columns)\n return widths\n }\n\n get heights(): number[] {\n const heights = this.getState('heights') as number[] | undefined\n if (!heights) return arrayOf(1, this.rackRows)\n if (heights.length < this.rackRows) return heights.concat(arrayOf(1, this.rackRows - heights.length))\n if (heights.length > this.rackRows) return heights.slice(0, this.rackRows)\n return heights\n }\n\n get widths_sum(): number {\n return this.widths.reduce((sum, w) => sum + w, 0) || this.columns\n }\n\n get heights_sum(): number {\n return this.heights.reduce((sum, h) => sum + h, 0) || this.rackRows\n }\n\n /** Column / Row ์‚ฌ์ด ๋“œ๋ž˜๊ทธ ํ•ธ๋“ค โ€” editor ์˜ widths/heights ๊ฐ€๋ณ€ ์กฐ์ ˆ. */\n get controls(): Array<Control> | undefined {\n const widths = this.widths\n const heights = this.heights\n const inside = this.textBounds\n const width_unit = inside.width / this.widths_sum\n const height_unit = inside.height / this.heights_sum\n\n const controls: Array<Control> = []\n\n let x = inside.left\n widths.slice(0, this.columns - 1).forEach(w => {\n x += w * width_unit\n controls.push({ x, y: inside.top, handler: columnControlHandler })\n })\n\n let y = inside.top\n heights.slice(0, this.rackRows - 1).forEach(h => {\n y += h * height_unit\n controls.push({ x: inside.left, y, handler: rowControlHandler })\n })\n\n return controls\n }\n\n // โ”€โ”€ 2D ๋ Œ๋”๋ง โ€” table layout ์˜ widths/heights ๊ธฐ๋ฐ˜ ๊ฒฉ์ž โ”€โ”€โ”€โ”€โ”€\n //\n // ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๊ฐ€ ์ž๊ธฐ ๋ Œ๋”๋งํ•˜์ง€๋งŒ *๋น„์–ด์žˆ๋Š” grid ๋„ modeling ์‹œ ๊ฐ€์‹œํ™”*. ๊ฒฉ์ž\n // ์ขŒํ‘œ๋Š” widths/heights (table layout ์˜ ๊ฐ€๋ณ€ ๋ถ„ํ• ) ๊ธฐ๋ฐ˜. cellOverrides ์˜\n // isEmpty (์‚ฌ์„ ) + border (4-side) ๋„ ํ‘œ์‹œ.\n\n render(ctx: CanvasRenderingContext2D) {\n // 2D ์—์„œ๋Š” hideRackFrame ์ด์–ด๋„ *์™ธ๊ณฝ + ๊ฒฉ์ž์„  + cell ๋งˆ์ปค* ๋Š” ํ•ญ์ƒ ๊ทธ๋ฆผ.\n // (2D ์˜ frame ์€ ์‹œ๊ฐ์  *๋ถ„ํ• ์„ * ์ด๋ผ frame mesh ์™€ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฆ„)\n const inside = this.textBounds\n const left = inside.left\n const top = inside.top\n const width = inside.width\n const height = inside.height\n const cols = this.columns\n const rows = this.rackRows\n const widths = this.widths\n const heights = this.heights\n const wSum = this.widths_sum\n const hSum = this.heights_sum\n const fill = (this.state.fillStyle as string) || '#e8e8ec'\n const stroke = (this.state.strokeStyle as string) || '#888'\n const lineWidth = (this.state.lineWidth as number) || 1\n const overrides = this.cellOverrides\n\n // column ๋ณ„ X ์ขŒํ‘œ (์ขŒโ†’์šฐ ๋ˆ„์ )\n const xs: number[] = [left]\n for (let c = 0; c < cols; c++) xs.push(xs[c] + (widths[c] / wSum) * width)\n // row ๋ณ„ Y ์ขŒํ‘œ (์ƒโ†’ํ•˜ ๋ˆ„์ )\n const ys: number[] = [top]\n for (let r = 0; r < rows; r++) ys.push(ys[r] + (heights[r] / hSum) * height)\n\n // Fill (๋ฐ˜ํˆฌ๋ช…) โ€” ์™ธ๊ณฝ ์˜์—ญ\n ctx.save()\n ctx.fillStyle = fill\n ctx.globalAlpha = 0.2\n ctx.fillRect(left, top, width, height)\n ctx.restore()\n\n // isEmpty cell ํ‘œ์‹œ (์‚ฌ์„  + ํšŒ์ƒ‰ fill)\n ctx.save()\n for (const [posKey, ov] of Object.entries(overrides)) {\n if (!ov.isEmpty) continue\n const parsed = this.parsePosKey(posKey)\n if (!parsed) continue\n if (parsed.col < 0 || parsed.col >= cols || parsed.row < 0 || parsed.row >= rows) continue\n const cl = xs[parsed.col]\n const ct = ys[parsed.row]\n const cw = xs[parsed.col + 1] - cl\n const ch = ys[parsed.row + 1] - ct\n ctx.fillStyle = '#cccccc'\n ctx.globalAlpha = 0.5\n ctx.fillRect(cl, ct, cw, ch)\n ctx.globalAlpha = 1\n ctx.strokeStyle = '#999'\n ctx.lineWidth = 1\n ctx.beginPath()\n ctx.moveTo(cl, ct); ctx.lineTo(cl + cw, ct + ch)\n ctx.moveTo(cl + cw, ct); ctx.lineTo(cl, ct + ch)\n ctx.stroke()\n }\n ctx.restore()\n\n // ์™ธ๊ณฝ + ๊ฒฉ์ž\n ctx.save()\n ctx.strokeStyle = stroke\n ctx.lineWidth = lineWidth\n ctx.strokeRect(left, top, width, height)\n ctx.beginPath()\n for (let c = 1; c < cols; c++) {\n ctx.moveTo(xs[c], top); ctx.lineTo(xs[c], top + height)\n }\n for (let r = 1; r < rows; r++) {\n ctx.moveTo(left, ys[r]); ctx.lineTo(left + width, ys[r])\n }\n ctx.stroke()\n ctx.restore()\n\n // cell ๋ณ„ ๋ช…์‹œ border\n for (const [posKey, ov] of Object.entries(overrides)) {\n if (!ov.border) continue\n const parsed = this.parsePosKey(posKey)\n if (!parsed) continue\n if (parsed.col < 0 || parsed.col >= cols || parsed.row < 0 || parsed.row >= rows) continue\n const cl = xs[parsed.col]\n const ct = ys[parsed.row]\n const cr = xs[parsed.col + 1]\n const cb = ys[parsed.row + 1]\n const b = ov.border\n const drawSide = (style: any, x1: number, y1: number, x2: number, y2: number) => {\n if (!style?.strokeStyle) return\n ctx.save()\n ctx.strokeStyle = style.strokeStyle\n ctx.lineWidth = style.lineWidth ?? 1\n ctx.beginPath()\n ctx.moveTo(x1, y1); ctx.lineTo(x2, y2)\n ctx.stroke()\n ctx.restore()\n }\n drawSide(b.top, cl, ct, cr, ct)\n drawSide(b.left, cl, ct, cl, cb)\n drawSide(b.bottom, cl, cb, cr, cb)\n drawSide(b.right, cr, ct, cr, cb)\n }\n\n // Selected bay ๊ฐ•์กฐ๋Š” *rack-grid-cell ์ž์ฒด* ์˜ render ๊ฐ€ ์ฒ˜๋ฆฌ (framework ์˜\n // selection ์‹œ์Šคํ…œ์ด cell ์˜ outline ์ž๋™ ๊ทธ๋ฆผ). RackGrid ๋Š” grid ๊ณจ๊ฒฉ๋งŒ.\n }\n\n // โ”€โ”€ Grid layout โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n get columns(): number {\n return Math.max(1, Math.floor(this.state.columns ?? 5))\n }\n\n get rackRows(): number {\n return Math.max(1, Math.floor(this.state.rows ?? 1))\n }\n\n get shelves(): number {\n return Math.max(1, Math.floor(this.state.shelves ?? 4))\n }\n\n // โ”€โ”€ cellId / posKey ๋ณ€ํ™˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /** posKey = `${col-1}-${row-1}` (0-based, 2 segments). 1-based input. */\n posKeyOf(col: number, row: number = 1): string {\n return `${col - 1}-${row - 1}`\n }\n\n /** cellId = `${col-1}-${row-1}-${shelf-1}` (0-based, 3 segments). 1-based input. */\n cellIdOf(col: number, row: number = 1, shelf: number = 1): string {\n return `${col - 1}-${row - 1}-${shelf - 1}`\n }\n\n parseCellId(cellId: string): { col: number; row: number; shelf: number } | null {\n const parts = cellId.split('-')\n if (parts.length !== 3) return null\n const [c, r, s] = parts.map(Number)\n if (!Number.isFinite(c) || !Number.isFinite(r) || !Number.isFinite(s)) return null\n return { col: c, row: r, shelf: s }\n }\n\n parsePosKey(posKey: string): { col: number; row: number } | null {\n const parts = posKey.split('-')\n if (parts.length !== 2) return null\n const [c, r] = parts.map(Number)\n if (!Number.isFinite(c) || !Number.isFinite(r)) return null\n return { col: c, row: r }\n }\n\n // โ”€โ”€ cellOverrides accessor โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n get cellOverrides(): { [posKey: string]: CellOverride } {\n return (this.state.cellOverrides ?? {}) as { [posKey: string]: CellOverride }\n }\n\n getCellOverride(posKey: string): CellOverride | undefined {\n return this.cellOverrides[posKey]\n }\n\n // โ”€โ”€ Shelf labels โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Parse `state.shelfLocations` ๋ฅผ levels ๊ธธ์ด array ๋กœ. ๋นˆ ์Šฌ๋กฏ์€ 1-based index default.\n * '1,2,3' โ†’ ['1', '2', '3', ...]\n * ',,,04' โ†’ ['1', '2', '3', '04']\n * undefined โ†’ ['1', '2', '3', '4', ...]\n */\n get shelfLabels(): string[] {\n const input = this.state.shelfLocations\n const levels = this.shelves\n const parts = (input || '').split(',')\n const out: string[] = []\n for (let i = 0; i < levels; i++) {\n const p = parts[i]\n out[i] = p && p.trim().length > 0 ? p.trim() : String(i + 1)\n }\n return out\n }\n\n // โ”€โ”€ Location ๋ณ€ํ™˜ (์–‘๋ฐฉํ–ฅ) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * cellId โ†’ location string. ์šฐ์„ ์ˆœ์œ„:\n * 1. cell-component (state.section/unit) โ€” source of truth\n * 2. cellOverrides[posKey] โ€” ํ˜ธํ™˜์„ฑ fallback\n * section/unit ๋‘˜ ๋‹ค ์žˆ๊ณ  isEmpty=false ์ผ ๋•Œ๋งŒ ๋ถ€์—ฌ. ๋ฏธ๋ถ€์—ฌ ์‹œ null.\n */\n locationOf(cellId: string): string | null {\n const parsed = this.parseCellId(cellId)\n if (!parsed) return null\n const posKey = `${parsed.col}-${parsed.row}`\n\n let section: string | undefined\n let unit: string | undefined\n let isEmpty: boolean | undefined\n let cellShelfLocations: string | undefined\n\n const cell = this.cellAt(parsed.col, parsed.row)\n if (cell) {\n section = cell.state.section\n unit = cell.state.unit\n isEmpty = cell.state.isEmpty\n cellShelfLocations = cell.state.shelfLocations\n } else {\n const override = this.cellOverrides[posKey]\n section = override?.section\n unit = override?.unit\n isEmpty = override?.isEmpty\n }\n\n if (!section || !unit || isEmpty) return null\n\n const pattern = this.state.locPattern ?? '{z}{s}-{u}-{sh}'\n const zone = this.state.zone ?? ''\n const shelfLabel = this._shelfLabelsFromCell(cellShelfLocations)[parsed.shelf] ?? String(parsed.shelf + 1)\n\n return pattern\n .replace(/\\{z\\}/g, zone)\n .replace(/\\{s\\}/g, section)\n .replace(/\\{u\\}/g, unit)\n .replace(/\\{sh\\}/g, shelfLabel)\n }\n\n /** cell.state.shelfLocations ๋ช…์‹œ ์‹œ ๊ทธ๊ฒƒ, ์•„๋‹ˆ๋ฉด RackGrid ์˜ shelfLabels. */\n private _shelfLabelsFromCell(cellShelfLocations: string | undefined): string[] {\n const input = cellShelfLocations ?? this.state.shelfLocations\n const levels = this.shelves\n const parts = (input || '').split(',')\n const out: string[] = []\n for (let i = 0; i < levels; i++) {\n const p = parts[i]\n out[i] = p && p.trim().length > 0 ? p.trim() : String(i + 1)\n }\n return out\n }\n\n /** location string โ†’ cellId. sparse ์—ญ์ธ๋ฑ์Šค lookup. ์—†์œผ๋ฉด null. */\n cellIdOfLocation(location: string): string | null {\n return this._locationIndex.get(location) ?? null\n }\n\n /** ๋ชจ๋“  (override ๋ช…์‹œ๋œ) cell ์˜ location ๋ชฉ๋ก. inspection ์šฉ. */\n get allLocations(): Array<{ cellId: string; location: string }> {\n const result: Array<{ cellId: string; location: string }> = []\n for (const [location, cellId] of this._locationIndex.entries()) {\n result.push({ cellId, location })\n }\n return result\n }\n\n // โ”€โ”€ Location ์—ญ์ธ๋ฑ์Šค (sparse cache) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n private _locationIndexCache?: Map<string, string>\n\n private get _locationIndex(): Map<string, string> {\n if (this._locationIndexCache) return this._locationIndexCache\n const map = new Map<string, string>()\n const shelves = this.shelves\n\n // 1. cell-component ๋“ค (source of truth) โ€” ๋ชจ๋“  bay ์ˆœํšŒ\n const cells = this.components as Component[] | undefined\n if (cells && cells.length > 0) {\n for (let i = 0; i < cells.length; i++) {\n const cell: any = cells[i]\n if (cell?.state?.type !== 'rack-grid-cell') continue\n const bayKey = cell.state.cellId\n if (!bayKey) continue\n const parsed = this.parsePosKey(bayKey)\n if (!parsed) continue\n for (let shelfIdx = 0; shelfIdx < shelves; shelfIdx++) {\n const cellId = `${parsed.col}-${parsed.row}-${shelfIdx}`\n const loc = this.locationOf(cellId)\n if (loc) map.set(loc, cellId)\n }\n }\n }\n\n // 2. cellOverrides fallback (cell-component ์—†๋Š” ์‹œ์  โ€” ํ˜ธํ™˜)\n const overrides = this.cellOverrides\n for (const posKey of Object.keys(overrides)) {\n const override = overrides[posKey]\n if (!override.section || !override.unit || override.isEmpty) continue\n const parsed = this.parsePosKey(posKey)\n if (!parsed) continue\n for (let shelfIdx = 0; shelfIdx < shelves; shelfIdx++) {\n const cellId = `${parsed.col}-${parsed.row}-${shelfIdx}`\n if (!map.has(this.locationOf(cellId) || '')) {\n const loc = this.locationOf(cellId)\n if (loc && !map.has(loc)) map.set(loc, cellId)\n }\n }\n }\n\n this._locationIndexCache = map\n return map\n }\n\n /** ๋ฃฐ / cellOverrides ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœ. things-scene ์˜ onchange* ๊ฐ€ ์ž๋™ ํ˜ธ์ถœ. */\n invalidateLocationIndex(): void {\n this._locationIndexCache = undefined\n }\n\n onchangeCellOverrides(): void { this.invalidateLocationIndex() }\n onchangeLocPattern(): void { this.invalidateLocationIndex() }\n onchangeShelfLocations(): void { this.invalidateLocationIndex() }\n onchangeZone(): void { this.invalidateLocationIndex() }\n onchangeSectionDigits(): void { this.invalidateLocationIndex() }\n onchangeUnitDigits(): void { this.invalidateLocationIndex() }\n onchangeShelves(): void { this.invalidateLocationIndex() }\n\n // โ”€โ”€ ์ž์‹ lookup โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * (col, row) ์œ„์น˜์˜ ์ž์‹ StorageRack. ์ž์‹์ด StorageRack ์ด ์•„๋‹Œ ๊ฒฝ์šฐ (Crane, AGV ๋“ฑ)\n * ๋Š” null โ€” Carrier ๋ณด๊ด€์€ StorageRack ๋งŒ.\n *\n * ์ž์‹์˜ grid ์œ„์น˜ ์‹๋ณ„: ์ž์‹์˜ state.column / state.row (1-based) ๋ช…์‹œ. RackGrid ๊ฐ€\n * ์ž์‹ ์ถ”๊ฐ€ ์‹œ ์ž๋™ ํ• ๋‹น ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ.\n */\n private _childRackAt(posKey: string): StorageRack | null {\n const parsed = this.parsePosKey(posKey)\n if (!parsed) return null\n const children = (this.components as Component[] | undefined) ?? []\n for (const c of children) {\n const type = (c.state as any)?.type\n if (type !== 'storage-rack') continue\n const childCol = ((c.state as any)?.column ?? 1) - 1\n const childRow = ((c.state as any)?.row ?? 1) - 1\n if (childCol === parsed.col && childRow === parsed.row) {\n return c as unknown as StorageRack\n }\n }\n return null\n }\n\n // โ”€โ”€ SlottedHolder ์ปจํŠธ๋ž™ โ€” ์ž์‹ StorageRack ์œผ๋กœ ์œ„์ž„ โ”€โ”€โ”€โ”€\n\n hasCarrierAt(slotId: string): boolean {\n const parsed = this.parseCellId(slotId)\n if (!parsed) return false\n const child = this._childRackAt(`${parsed.col}-${parsed.row}`)\n return child?.hasCarrierAt(`0-0-${parsed.shelf}`) ?? false\n }\n\n obtainCarrier(slotIdOrLocation: string): Component | null {\n const slotId = this._resolveToCellId(slotIdOrLocation)\n if (!slotId) return null\n const parsed = this.parseCellId(slotId)\n if (!parsed) return null\n const child = this._childRackAt(`${parsed.col}-${parsed.row}`)\n return child?.obtainCarrier(`0-0-${parsed.shelf}`) ?? null\n }\n\n canReceiveAt(slotIdOrLocation: string, carrier?: Component): boolean {\n const slotId = this._resolveToCellId(slotIdOrLocation)\n if (!slotId) return false\n const parsed = this.parseCellId(slotId)\n if (!parsed) return false\n // isEmpty ์œ„์น˜ ๋Š” carrier ๋ชป ๋ฐ›์Œ (location-less, modeling ์ฐจ์›)\n const override = this.cellOverrides[`${parsed.col}-${parsed.row}`]\n if (override?.isEmpty) return false\n const child = this._childRackAt(`${parsed.col}-${parsed.row}`)\n return child?.canReceiveAt(`0-0-${parsed.shelf}`, carrier) ?? false\n }\n\n async receiveAt(slotIdOrLocation: string, carrier: Component, options?: any): Promise<void> {\n const slotId = this._resolveToCellId(slotIdOrLocation)\n if (!slotId) throw new Error(`RackGrid.receiveAt: cannot resolve \"${slotIdOrLocation}\"`)\n const parsed = this.parseCellId(slotId)\n if (!parsed) throw new Error(`RackGrid.receiveAt: invalid cellId \"${slotId}\"`)\n const child = this._childRackAt(`${parsed.col}-${parsed.row}`)\n if (!child) {\n throw new Error(`RackGrid.receiveAt: no StorageRack at posKey=${parsed.col}-${parsed.row}`)\n }\n return child.receiveAt(`0-0-${parsed.shelf}`, carrier, options)\n }\n\n recordFromCarrier(carrier: Component, slotId: string): SlotRecord {\n const { id, refid, transform, ...rest } = ((carrier.state as any) || {}) as any\n return { ...rest, cellId: slotId }\n }\n\n /**\n * Slot ์˜ attach object3d โ€” Stock InstancedMesh ์˜ instance ์™€ *๊ฐ™์€ world ์œ„์น˜* ์—\n * ์œ„์น˜ํ•œ invisible Object3D. popup tether / Carriable.applyHolderAttachPoint ๊ฐ€ ์ด\n * object3d ์˜ matrixWorld ๋ฅผ ์‚ฌ์šฉ. lazy ์ƒ์„ฑ + cache.\n */\n private _attachAnchorByCell: Map<string, THREE.Object3D> = new Map()\n\n getSlotAttachObject3d(slotId: string): THREE.Object3D | undefined {\n const parsed = this.parseCellId(slotId)\n if (!parsed) return undefined\n if (parsed.col < 0 || parsed.col >= this.columns) return undefined\n if (parsed.row < 0 || parsed.row >= this.rackRows) return undefined\n if (parsed.shelf < 0 || parsed.shelf >= this.shelves) return undefined\n\n const ro: any = (this as any)._realObject\n if (!ro?.object3d) return undefined\n\n let obj = this._attachAnchorByCell.get(slotId)\n if (!obj) {\n obj = new THREE.Object3D()\n obj.name = `rack-grid-anchor:${slotId}`\n ro.object3d.add(obj)\n this._attachAnchorByCell.set(slotId, obj)\n }\n\n // ์œ„์น˜ ๊ฐฑ์‹  โ€” Stock InstancedMesh ์˜ instance ์œ„์น˜ ์™€ ๋™์ผ ๊ณต์‹\n const rs: any = this.state\n const cols = this.columns\n const rows = this.rackRows\n const shelves = this.shelves\n const width = (rs?.width as number) ?? 400\n const height = (rs?.depth as number) ?? 2000\n const depth = (rs?.height as number) ?? 200\n const shelfBase = Math.max(0, Math.min((rs?.shelfBaseHeight as number) || 0, height * 0.9))\n const shelfZone = height - shelfBase\n const bayW = width / cols\n const bayD = depth / rows\n const cellY = shelfZone / shelves\n const baseY = -height / 2\n const shelfBaseY = baseY + shelfBase\n const stockD = cellY * 0.7\n\n const cx = (parsed.col - cols / 2 + 0.5) * bayW\n const cellBottomY = shelfBaseY + parsed.shelf * cellY\n const cy = cellBottomY + stockD / 2\n const cz = (parsed.row - rows / 2 + 0.5) * bayD\n obj.position.set(cx, cy, cz)\n // *parent ์˜ matrixWorld ๊ฐ€ dirty ๋ฉด ์ž์‹ matrixWorld ๋„ dirty* โ€” ๊ฐ•์ œ ๊ฐฑ์‹ .\n ro.object3d.updateMatrixWorld(true)\n obj.updateMatrixWorld(true)\n return obj\n }\n\n getSlotSize(slotId: string): { width: number; height: number; depth: number } | undefined {\n const parsed = this.parseCellId(slotId)\n if (!parsed) return undefined\n const rs: any = this.state\n const width = (rs?.width as number) ?? 400\n const height = (rs?.depth as number) ?? 2000\n const depth = (rs?.height as number) ?? 200\n const shelfBase = Math.max(0, Math.min((rs?.shelfBaseHeight as number) || 0, height * 0.9))\n const shelfZone = height - shelfBase\n const cellY = shelfZone / this.shelves\n return {\n width: (width / this.columns) * 0.85,\n height: (depth / this.rackRows) * 0.85, // 2D height = 3D Z ํญ\n depth: cellY * 0.7 // 3D Y ํญ (= stockD)\n }\n }\n\n cellCenter2D(slotId: string): { x: number; y: number } | null {\n const parsed = this.parseCellId(slotId)\n if (!parsed) return null\n const rs: any = this.state\n const left = (rs?.left as number) ?? 0\n const top = (rs?.top as number) ?? 0\n const width = (rs?.width as number) ?? 400\n const height = (rs?.height as number) ?? 200\n // table layout ์˜ widths/heights ๋น„๋ก€ ์œ„์น˜\n const widths = this.widths\n const heights = this.heights\n const wSum = this.widths_sum\n const hSum = this.heights_sum\n let cumW = 0\n for (let c = 0; c < parsed.col; c++) cumW += widths[c]\n let cumH = 0\n for (let r = 0; r < parsed.row; r++) cumH += heights[r]\n const x = left + (cumW + widths[parsed.col] / 2) / wSum * width\n const y = top + (cumH + heights[parsed.row] / 2) / hSum * height\n return { x, y }\n }\n\n slotTargetAt(slotIdOrLocation: string): SlotTarget {\n const slotId = this._resolveToCellId(slotIdOrLocation)\n if (!slotId) throw new Error(`RackGrid.slotTargetAt: cannot resolve \"${slotIdOrLocation}\"`)\n return new SlotTarget(this, slotId)\n }\n\n // โ”€โ”€ Helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * ์™ธ๋ถ€ ์ž…๋ ฅ โ†’ ๋‚ด๋ถ€ cellId ๋ณ€ํ™˜:\n * - \"N-N-N\" (3 segments, ๋ชจ๋‘ ์ˆซ์ž) โ†’ cellId ๊ทธ๋Œ€๋กœ (dual-accept)\n * - ๊ทธ ์™ธ โ†’ location ์œผ๋กœ ๊ฐ„์ฃผ, locationIndex lookup\n */\n private _resolveToCellId(input: string): string | null {\n if (this._isCellIdFormat(input)) return input\n return this.cellIdOfLocation(input)\n }\n\n private _isCellIdFormat(s: string): boolean {\n const parts = s.split('-')\n return parts.length === 3 && parts.every(p => /^\\d+$/.test(p))\n }\n\n // โ”€โ”€ Bulk ํŽธ์ง‘ API โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n //\n // ๋ชจ๋‘ *single setState* ๋กœ cellOverrides ๊ฐฑ์‹  โ†’ ๋‹จ์ผ 'change' ์ด๋ฒคํŠธ๋งŒ ๋ฐœ์‚ฌ.\n // ๋งคํ•‘ cascade ํšŒํ”ผ ์œ„ํ•ด silent ๊ฐฑ์‹  ๋ฉ”์„œ๋“œ ์ œ๊ณต (`_setCellOverridesSilently`).\n\n /**\n * ํ•œ ์œ„์น˜์˜ cellOverride ๋ฅผ ๊ฐฑ์‹  (merge). ๊ธฐ์กด ํ•„๋“œ๋Š” ์œ ์ง€, ์ƒˆ ํ•„๋“œ๋งŒ ๋ฎ์–ด์”€.\n * `partial` ์˜ ํ•„๋“œ๊ฐ€ *undefined* ๋ฉด *๊ทธ ํ•„๋“œ ์‚ญ์ œ* (override ํ‚ค์—์„œ ์ œ๊ฑฐ).\n */\n setCellOverride(posKey: string, partial: Partial<CellOverride>): void {\n const current = this.cellOverrides\n const existing = current[posKey] ?? {}\n const merged: any = { ...existing }\n for (const [k, v] of Object.entries(partial)) {\n if (v === undefined) delete merged[k]\n else merged[k] = v\n }\n const next = { ...current }\n if (Object.keys(merged).length === 0) delete next[posKey]\n else next[posKey] = merged\n this.setState({ cellOverrides: next })\n }\n\n /** ํ•œ ์œ„์น˜์˜ override ์ „์ฒด ์‚ญ์ œ. */\n clearCellOverride(posKey: string): void {\n const current = this.cellOverrides\n if (!(posKey in current)) return\n const next = { ...current }\n delete next[posKey]\n this.setState({ cellOverrides: next })\n }\n\n /**\n * ์—ฌ๋Ÿฌ ์œ„์น˜์˜ isEmpty ์ผ๊ด„ ํ† ๊ธ€. cell-component ์žˆ์œผ๋ฉด cell.set(), ์—†์œผ๋ฉด cellOverrides.\n */\n setIsEmpty(posKeys: string[], isEmpty: boolean): void {\n const hasCells = this.components.some((c: Component) => (c as any)?.state?.type === 'rack-grid-cell')\n if (hasCells) {\n for (const posKey of posKeys) {\n const cell = this.cellAtBayKey(posKey)\n cell?.set?.('isEmpty', isEmpty)\n }\n this.invalidateLocationIndex()\n return\n }\n // Fallback: cellOverrides\n const current = this.cellOverrides\n const next = { ...current }\n for (const posKey of posKeys) {\n const existing = next[posKey] ?? {}\n const merged: any = { ...existing, isEmpty }\n if (!isEmpty && !existing.section && !existing.unit && !existing.border && !existing.merged) {\n delete next[posKey]\n } else {\n next[posKey] = merged\n }\n }\n this.setState({ cellOverrides: next })\n }\n\n /**\n * ์—ฌ๋Ÿฌ ์œ„์น˜์˜ border ์Šคํƒ€์ผ ์ผ๊ด„ ์„ค์ •. `where` ('top'|'left'|'bottom'|'right'|'all').\n * - style = null โ†’ ํ•ด๋‹น side ์‚ญ์ œ\n * - where = 'all' โ†’ 4๋ฉด ๋ชจ๋‘ ๋™์ผ style\n */\n setBorder(posKeys: string[], style: any, where: 'all' | 'top' | 'left' | 'bottom' | 'right' = 'all'): void {\n const sides = where === 'all' ? ['top', 'left', 'bottom', 'right'] : [where]\n const current = this.cellOverrides\n const next = { ...current }\n for (const posKey of posKeys) {\n const existing = next[posKey] ?? {}\n const border = { ...(existing.border ?? {}) }\n for (const side of sides) {\n if (style == null) delete border[side]\n else border[side] = style\n }\n const merged: any = { ...existing, border }\n if (Object.keys(border).length === 0) delete merged.border\n next[posKey] = merged\n }\n this.setState({ cellOverrides: next })\n }\n\n /**\n * ์ž๋™ ์ฑ„๋ฒˆ โ€” ์„ ํƒ๋œ cell ๋“ค์— section/unit ์ž๋™ ๋ถ€์—ฌ.\n *\n * @param posKeys ์ฑ„๋ฒˆ ๋Œ€์ƒ (์„ ํƒ ์˜์—ญ). ๋นˆ array ๋ฉด *์ „์ฒด grid*.\n * @param direction ์ˆœํšŒ ๋ฐฉํ–ฅ:\n * 'cw' โ€” ํ•œ row ๋‚ด col ์ฆ๊ฐ€ โ†’ ๋‹ค์Œ row ๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ (boustrophedon)\n * 'ccw' โ€” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ\n * 'zigzag' โ€” col ์šฐ์„  ์ฆ๊ฐ€ (cw ์˜ 90ยฐ ํšŒ์ „)\n * 'zigzag-reverse' โ€” ๋ฐ˜๋Œ€\n * @param skipNumbering true ๋ฉด isEmpty cell ๊ฑด๋„ˆ๋œ€ (๋‹จ์œ„ ๋ฒˆํ˜ธ ์•ˆ ์ฆ๊ฐ€).\n * @param startSection ์ฒซ section ๋ฒˆํ˜ธ (default 1)\n * @param startUnit ์ฒซ unit ๋ฒˆํ˜ธ (default 1)\n *\n * Aisle row (๋ชจ๋“  cell isEmpty) ๋Š” section ๊ฒฝ๊ณ„๋กœ ์ธ์‹ โ€” section ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค์Œ row ์—์„œ +1.\n *\n * setState ํ•œ ๋ฒˆ (cellOverrides ์ผ๊ด„ ๊ฐฑ์‹ ) โ†’ location ์—ญ์ธ๋ฑ์Šค 1ํšŒ ๋ฌดํšจํ™”.\n */\n increaseLocation(\n posKeys: string[],\n direction: 'cw' | 'ccw' | 'zigzag' | 'zigzag-reverse' = 'cw',\n skipNumbering: boolean = false,\n startSection: number = 1,\n startUnit: number = 1\n ): void {\n const sectionDigits = Math.max(1, Math.floor(this.state.sectionDigits ?? 2))\n const unitDigits = Math.max(1, Math.floor(this.state.unitDigits ?? 2))\n\n // ๋Œ€์ƒ ๊ฒฐ์ •: posKeys ๋น„์—ˆ์œผ๋ฉด ์ „์ฒด grid\n const targets: string[] = posKeys.length > 0\n ? [...posKeys]\n : this._allPosKeys()\n\n // (1) row ๋ณ„ ๋ถ„๋ฅ˜ (2D ๋ฐฐ์—ด, [row][col] = posKey)\n const byRow: (string | null)[][] = []\n let maxRow = -1\n let maxCol = -1\n for (const posKey of targets) {\n const parsed = this.parsePosKey(posKey)\n if (!parsed) continue\n if (!byRow[parsed.row]) byRow[parsed.row] = []\n byRow[parsed.row][parsed.col] = posKey\n if (parsed.row > maxRow) maxRow = parsed.row\n if (parsed.col > maxCol) maxCol = parsed.col\n }\n\n // (2) aisle row ์‹๋ณ„ โ€” row ์˜ ๋ชจ๋“  (์„ ํƒ๋œ) cell ์ด isEmpty\n const overrides = this.cellOverrides\n const isAisleRow = (row: number): boolean => {\n const cells = byRow[row]\n if (!cells || cells.length === 0) return true\n return cells.every(p => p == null || overrides[p]?.isEmpty === true)\n }\n\n // (3) section ๋ณ„ ๋ฌถ๊ธฐ (aisle ์‚ฌ์ด์˜ ์—ฐ์† row ๋“ค)\n const sections: number[][] = []\n let currentSection: number[] = []\n for (let r = 0; r <= maxRow; r++) {\n if (!byRow[r]) continue\n if (isAisleRow(r)) {\n if (currentSection.length > 0) {\n sections.push(currentSection)\n currentSection = []\n }\n } else {\n currentSection.push(r)\n }\n }\n if (currentSection.length > 0) sections.push(currentSection)\n\n // (4) ๋ฐฉํ–ฅ๋ณ„ ์ˆœํšŒ๋กœ (section, unit) ๋ถ€์—ฌ\n const hasCells = this.components.some((c: Component) => (c as any)?.state?.type === 'rack-grid-cell')\n const next = { ...overrides }\n let sectionNum = Number(startSection) || 1\n\n const setSU = (posKey: string, section: number, unit: number) => {\n const sStr = String(section).padStart(sectionDigits, '0')\n const uStr = String(unit).padStart(unitDigits, '0')\n if (hasCells) {\n const cell = this.cellAtBayKey(posKey)\n cell?.set?.('section', sStr)\n cell?.set?.('unit', uStr)\n } else {\n const existing = next[posKey] ?? {}\n next[posKey] = { ...existing, section: sStr, unit: uStr }\n }\n }\n\n const clearSU = (posKey: string) => {\n if (hasCells) {\n const cell = this.cellAtBayKey(posKey)\n cell?.set?.('section', null)\n cell?.set?.('unit', null)\n } else {\n const existing = next[posKey]\n if (!existing) return\n const { section, unit, ...rest } = existing\n if (Object.keys(rest).length === 0) delete next[posKey]\n else next[posKey] = rest\n }\n }\n\n for (const sectionRows of sections) {\n for (const row of sectionRows) {\n const cells = byRow[row]\n if (!cells) continue\n // ๋ฐฉํ–ฅ๋ณ„ cell ์ˆœํšŒ ์ˆœ์„œ ๊ฒฐ์ •\n const orderedCols = this._orderCols(row, sectionRows, direction, maxCol)\n let unitNum = Number(startUnit) || 1\n for (const col of orderedCols) {\n const posKey = cells[col]\n if (!posKey) continue\n const isEmpty = overrides[posKey]?.isEmpty === true\n if (isEmpty) {\n clearSU(posKey)\n if (!skipNumbering) unitNum++\n } else {\n setSU(posKey, sectionNum, unitNum)\n unitNum++\n }\n }\n // row ๋งˆ๋‹ค section ์ฆ๊ฐ€? ์•„๋‹˜ โ€” section ์€ *aisle ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌถ์Œ ๋‹จ์œ„*.\n // ๋™์ผ section ๋‚ด ๋‹ค์Œ row ๋Š” unit ๋ฒˆํ˜ธ ๋‹ค์‹œ startUnit ๋ถ€ํ„ฐ.\n // rack-table ์˜ ์›๋ณธ ๋™์ž‘๊ณผ ๋™์ผ.\n }\n sectionNum++\n }\n\n // cell-component ๊ฐ€ ์žˆ์œผ๋ฉด cell.set() ์œผ๋กœ ์ด๋ฏธ ๊ฐฑ์‹ ๋จ (setSU/clearSU ์•ˆ์—์„œ).\n // ์—†์œผ๋ฉด cellOverrides fallback ์ ์šฉ.\n if (!hasCells) {\n this.setState({ cellOverrides: next })\n } else {\n this.invalidateLocationIndex()\n }\n }\n\n /**\n * ๋ชจ๋“  grid ์œ„์น˜ (์ „์ฒด columns ร— rows) ์˜ posKey ๋ชฉ๋ก.\n */\n private _allPosKeys(): string[] {\n const cols = this.columns\n const rows = this.rackRows\n const out: string[] = []\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n out.push(`${c}-${r}`)\n }\n }\n return out\n }\n\n /**\n * Row ์˜ col ์ˆœํšŒ ์ˆœ์„œ ๊ฒฐ์ •. boustrophedon (S ์žํ˜•) ํŒจํ„ด ์ง€์›.\n * cw : ์ง์ˆ˜ row ๋Š” ์ขŒโ†’์šฐ, ํ™€์ˆ˜ row ๋Š” ์šฐโ†’์ขŒ\n * ccw : ์ง์ˆ˜ row ๋Š” ์šฐโ†’์ขŒ, ํ™€์ˆ˜ row ๋Š” ์ขŒโ†’์šฐ\n * zigzag : ๋ชจ๋“  row ์ขŒโ†’์šฐ (๋‹จ์ˆœ)\n * zigzag-reverse : ๋ชจ๋“  row ์šฐโ†’์ขŒ\n */\n private _orderCols(\n row: number,\n sectionRows: number[],\n direction: 'cw' | 'ccw' | 'zigzag' | 'zigzag-reverse',\n maxCol: number\n ): number[] {\n // section ๋‚ด row ์˜ *์ƒ๋Œ€ ์ธ๋ฑ์Šค* โ€” section ๊ฒฝ๊ณ„์—์„œ ํŒจํ„ด์ด ๋ฆฌ์…‹๋˜๋„๋ก.\n const idxInSection = sectionRows.indexOf(row)\n const cols: number[] = []\n for (let c = 0; c <= maxCol; c++) cols.push(c)\n\n switch (direction) {\n case 'cw':\n return idxInSection % 2 === 0 ? cols : cols.slice().reverse()\n case 'ccw':\n return idxInSection % 2 === 0 ? cols.slice().reverse() : cols\n case 'zigzag':\n return cols\n case 'zigzag-reverse':\n return cols.slice().reverse()\n }\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import * as THREE from 'three';
2
+ export declare const POST_MATERIAL: THREE.MeshStandardMaterial;
3
+ export declare const BEAM_MATERIAL: THREE.MeshStandardMaterial;
4
+ export declare const BRACE_MATERIAL: THREE.MeshStandardMaterial;
5
+ export declare const SHELF_MATERIAL: THREE.MeshStandardMaterial;
6
+ /** Stock โ€” white base, instanceColor ๊ฐ€ ์ตœ์ข… ์ƒ‰์ƒ์ด ๋จ. */
7
+ export declare const STOCK_MATERIAL: THREE.MeshStandardMaterial;
8
+ /** Empty stock (record ์—†๋Š” cell, hideEmptyStock=off ์‹œ) โ€” ํšŒ์ƒ‰ ๋ฐ˜ํˆฌ๋ช…. */
9
+ export declare const EMPTY_STOCK_MATERIAL: THREE.MeshStandardMaterial;
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Copyright ยฉ HatioLab Inc. All rights reserved.
3
+ *
4
+ * Shared frame / shelf / stock materials โ€” module-level singleton.
5
+ *
6
+ * StorageRack ๊ณผ RackGrid ์˜ frame mesh material ์„ *๊ณต์œ * โ€” ์—ฌ๋Ÿฌ rack ์ธ์Šคํ„ด์Šค๊ฐ€
7
+ * scene ์— ์žˆ์–ด๋„ GPU material 1๊ฐœ. ์ „์ฒด application lifecycle ๋™์•ˆ ์‚ด์•„์žˆ์Œ
8
+ * (dispose ์•ˆ ํ•จ).
9
+ *
10
+ * ์ƒ‰์ƒ / ์†์„ฑ์„ ์ธ์Šคํ„ด์Šค๋ณ„๋กœ *override* ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ๋‚ด ๋ณ„๋„ material ์ƒ์„ฑ
11
+ * (ํ˜„์žฌ๋Š” ๋ชจ๋“  rack ์ด ๊ฐ™์€ ์ƒ‰ โ€” singleton ์œผ๋กœ ์ถฉ๋ถ„).
12
+ */
13
+ import * as THREE from 'three';
14
+ const POST_COLOR = 0x6a7080;
15
+ const BEAM_COLOR = 0x556070;
16
+ const BRACE_COLOR = 0x556070;
17
+ export const POST_MATERIAL = new THREE.MeshStandardMaterial({
18
+ color: POST_COLOR,
19
+ metalness: 0.7,
20
+ roughness: 0.4
21
+ });
22
+ export const BEAM_MATERIAL = new THREE.MeshStandardMaterial({
23
+ color: BEAM_COLOR,
24
+ metalness: 0.7,
25
+ roughness: 0.4
26
+ });
27
+ export const BRACE_MATERIAL = new THREE.MeshStandardMaterial({
28
+ color: BRACE_COLOR,
29
+ metalness: 0.7,
30
+ roughness: 0.4
31
+ });
32
+ export const SHELF_MATERIAL = new THREE.MeshStandardMaterial({
33
+ color: BEAM_COLOR,
34
+ metalness: 0.3,
35
+ roughness: 0.6,
36
+ transparent: true,
37
+ opacity: 0.25,
38
+ side: THREE.DoubleSide
39
+ });
40
+ /** Stock โ€” white base, instanceColor ๊ฐ€ ์ตœ์ข… ์ƒ‰์ƒ์ด ๋จ. */
41
+ export const STOCK_MATERIAL = new THREE.MeshStandardMaterial({
42
+ color: 0xffffff,
43
+ metalness: 0,
44
+ roughness: 0.9
45
+ });
46
+ /** Empty stock (record ์—†๋Š” cell, hideEmptyStock=off ์‹œ) โ€” ํšŒ์ƒ‰ ๋ฐ˜ํˆฌ๋ช…. */
47
+ export const EMPTY_STOCK_MATERIAL = new THREE.MeshStandardMaterial({
48
+ color: 0x888888,
49
+ metalness: 0,
50
+ roughness: 0.9,
51
+ transparent: true,
52
+ opacity: 0.2,
53
+ depthWrite: false
54
+ });
55
+ //# sourceMappingURL=rack-materials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rack-materials.js","sourceRoot":"","sources":["../src/rack-materials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,MAAM,UAAU,GAAG,QAAQ,CAAA;AAC3B,MAAM,UAAU,GAAG,QAAQ,CAAA;AAC3B,MAAM,WAAW,GAAG,QAAQ,CAAA;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC1D,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;CACf,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC1D,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;CACf,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC3D,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;CACf,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC3D,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,KAAK,CAAC,UAAU;CACvB,CAAC,CAAA;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC3D,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;CACf,CAAC,CAAA;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACjE,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;IACZ,UAAU,EAAE,KAAK;CAClB,CAAC,CAAA","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n *\n * Shared frame / shelf / stock materials โ€” module-level singleton.\n *\n * StorageRack ๊ณผ RackGrid ์˜ frame mesh material ์„ *๊ณต์œ * โ€” ์—ฌ๋Ÿฌ rack ์ธ์Šคํ„ด์Šค๊ฐ€\n * scene ์— ์žˆ์–ด๋„ GPU material 1๊ฐœ. ์ „์ฒด application lifecycle ๋™์•ˆ ์‚ด์•„์žˆ์Œ\n * (dispose ์•ˆ ํ•จ).\n *\n * ์ƒ‰์ƒ / ์†์„ฑ์„ ์ธ์Šคํ„ด์Šค๋ณ„๋กœ *override* ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ๋‚ด ๋ณ„๋„ material ์ƒ์„ฑ\n * (ํ˜„์žฌ๋Š” ๋ชจ๋“  rack ์ด ๊ฐ™์€ ์ƒ‰ โ€” singleton ์œผ๋กœ ์ถฉ๋ถ„).\n */\nimport * as THREE from 'three'\n\nconst POST_COLOR = 0x6a7080\nconst BEAM_COLOR = 0x556070\nconst BRACE_COLOR = 0x556070\n\nexport const POST_MATERIAL = new THREE.MeshStandardMaterial({\n color: POST_COLOR,\n metalness: 0.7,\n roughness: 0.4\n})\n\nexport const BEAM_MATERIAL = new THREE.MeshStandardMaterial({\n color: BEAM_COLOR,\n metalness: 0.7,\n roughness: 0.4\n})\n\nexport const BRACE_MATERIAL = new THREE.MeshStandardMaterial({\n color: BRACE_COLOR,\n metalness: 0.7,\n roughness: 0.4\n})\n\nexport const SHELF_MATERIAL = new THREE.MeshStandardMaterial({\n color: BEAM_COLOR,\n metalness: 0.3,\n roughness: 0.6,\n transparent: true,\n opacity: 0.25,\n side: THREE.DoubleSide\n})\n\n/** Stock โ€” white base, instanceColor ๊ฐ€ ์ตœ์ข… ์ƒ‰์ƒ์ด ๋จ. */\nexport const STOCK_MATERIAL = new THREE.MeshStandardMaterial({\n color: 0xffffff,\n metalness: 0,\n roughness: 0.9\n})\n\n/** Empty stock (record ์—†๋Š” cell, hideEmptyStock=off ์‹œ) โ€” ํšŒ์ƒ‰ ๋ฐ˜ํˆฌ๋ช…. */\nexport const EMPTY_STOCK_MATERIAL = new THREE.MeshStandardMaterial({\n color: 0x888888,\n metalness: 0,\n roughness: 0.9,\n transparent: true,\n opacity: 0.2,\n depthWrite: false\n})\n"]}
@@ -1,6 +1,21 @@
1
+ import * as THREE from 'three';
1
2
  import { RealObjectGroup } from '@hatiolab/things-scene';
2
3
  export declare class StorageRack3D extends RealObjectGroup {
4
+ /** state.data ๊ธฐ๋ฐ˜ stock ์‹œ๊ฐํ™” InstancedMesh. rebuildStockMesh ๊ฐ€ ๊ด€๋ฆฌ. */
5
+ private _stockMesh?;
6
+ /** Horizontal beam ๊ทธ๋ฃน โ€” hideHorizontalFrame ์‹œ visibility ํ† ๊ธ€. */
7
+ private _beamGroup?;
8
+ /** Public read-only โ€” click ํ•ธ๋“ค๋Ÿฌ๊ฐ€ instanceId/record ์—ญ์ฐธ์กฐ์— ์‚ฌ์šฉ. */
9
+ get stockMesh(): THREE.InstancedMesh | undefined;
10
+ /** hideHorizontalFrame ๋ณ€๊ฒฝ ์‹œ RackGrid ์˜ onchange ๊ฐ€ ํ˜ธ์ถœ โ€” ์ฆ‰์‹œ ๋ฐ˜์˜. */
11
+ applyFrameVisibility(): void;
3
12
  build(): void;
13
+ /**
14
+ * state.data ์˜ ๊ฐ record ๋ฅผ ํ•œ InstancedMesh instance ๋กœ ๋ Œ๋”๋ง.
15
+ * cellMap ์— ์žˆ๋Š” cellId ๋งŒ instance ๋ถ€์—ฌ โ€” ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œ.
16
+ * Mover/pickAndPlace ์™€ ๋ฌด๊ด€ โ€” ์ˆœ์ˆ˜ ์‹œ๊ฐํ™”.
17
+ */
18
+ rebuildStockMesh(): void;
4
19
  updateDimension(): void;
5
20
  onchange(after: Record<string, unknown>, before: Record<string, unknown>): void;
6
21
  updateAlpha(): void;