@rb-games/core 0.1.0 → 0.1.2

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 (43) hide show
  1. package/dist/chunk-5BLUF2HG.js +25 -0
  2. package/dist/chunk-5BLUF2HG.js.map +1 -0
  3. package/dist/chunk-DOHQE2YZ.js +392 -0
  4. package/dist/chunk-DOHQE2YZ.js.map +1 -0
  5. package/dist/chunk-FOZO6TLY.js +673 -0
  6. package/dist/chunk-FOZO6TLY.js.map +1 -0
  7. package/dist/chunk-G3PMV62Z.js +33 -0
  8. package/dist/chunk-G3PMV62Z.js.map +1 -0
  9. package/dist/chunk-KOHCRCV3.js +490 -0
  10. package/dist/chunk-KOHCRCV3.js.map +1 -0
  11. package/dist/chunk-MI6BP7A6.js +11 -0
  12. package/dist/chunk-MI6BP7A6.js.map +1 -0
  13. package/dist/chunk-NQMORMNP.js +15 -0
  14. package/dist/chunk-NQMORMNP.js.map +1 -0
  15. package/dist/chunk-RAEOBW6E.js +133 -0
  16. package/dist/chunk-RAEOBW6E.js.map +1 -0
  17. package/dist/chunk-UE7T7Z45.js +884 -0
  18. package/dist/chunk-UE7T7Z45.js.map +1 -0
  19. package/dist/devtools/index.js +2 -882
  20. package/dist/devtools/index.js.map +1 -1
  21. package/dist/engine/index.js +6 -1267
  22. package/dist/engine/index.js.map +1 -1
  23. package/dist/filters/index.js +1 -1
  24. package/dist/helpers/index.js +6 -35
  25. package/dist/helpers/index.js.map +1 -1
  26. package/dist/i18n/index.js +4 -525
  27. package/dist/i18n/index.js.map +1 -1
  28. package/dist/layout/index.js +2 -671
  29. package/dist/layout/index.js.map +1 -1
  30. package/dist/particle/index.js +1 -6
  31. package/dist/particle/index.js.map +1 -1
  32. package/dist/plugins/Plugin.types.d.ts +4 -2
  33. package/dist/plugins/Plugin.types.d.ts.map +1 -1
  34. package/dist/plugins/index.js +6 -521
  35. package/dist/plugins/index.js.map +1 -1
  36. package/dist/state-machine/index.js +1 -1
  37. package/dist/store/index.js +1 -1
  38. package/dist/ui/index.js +5 -531
  39. package/dist/ui/index.js.map +1 -1
  40. package/dist/utils/index.js +4 -897
  41. package/dist/utils/index.js.map +1 -1
  42. package/dist/vite/index.js +1 -1
  43. package/package.json +3 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../layout/Bounds.ts","../../layout/Align.ts","../../layout/Distribute.ts","../../layout/Flow.ts","../../layout/PositionUtils.ts"],"names":["parent","Rectangle"],"mappings":"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","file":"index.js","sourcesContent":["// Bounds.ts\nimport { Container, Point, Rectangle } from 'pixi.js';\n\n/**\n * Configuration options for alignment operations.\n *\n * @example\n * ```typescript\n * // Align to selection (default, no options needed)\n * Align.hCenter([sprite1, sprite2]);\n *\n * // Align to container\n * Align.left([sprite1, sprite2], { container: myContainer });\n *\n * // Align to rectangle\n * Align.hCenter([sprite1], { container: new Rectangle(0, 0, 1920, 1080) });\n *\n * // Align to key object\n * Align.top([sprite1, sprite2], { key: mainSprite });\n * ```\n */\nexport interface AlignOptions {\n key?: Container;\n container?: Container | Rectangle;\n}\n\nfunction rectToBoundsLike(r: Rectangle): BoundsLike {\n const left = r.x;\n const top = r.y;\n const width = r.width;\n const height = r.height;\n const right = left + width;\n const bottom = top + height;\n return {\n left,\n right,\n top,\n bottom,\n width,\n height,\n centerX: left + width / 2,\n centerY: top + height / 2,\n };\n}\n\n/**\n * Represents the bounding box of a container with convenient access to edges and center points.\n *\n * This interface provides a virtual container that describes the bounds of one or more\n * PixiJS containers, useful for alignment and layout calculations.\n *\n * @example\n * ```typescript\n * const bounds: BoundsLike = {\n * left: 0,\n * right: 100,\n * top: 0,\n * bottom: 50,\n * width: 100,\n * height: 50,\n * centerX: 50,\n * centerY: 25\n * };\n * ```\n */\nexport interface BoundsLike {\n /** Left edge X coordinate */\n left: number;\n /** Right edge X coordinate */\n right: number;\n /** Top edge Y coordinate */\n top: number;\n /** Bottom edge Y coordinate */\n bottom: number;\n /** Total width (right - left) */\n width: number;\n /** Total height (bottom - top) */\n height: number;\n /** Horizontal center X coordinate */\n centerX: number;\n /** Vertical center Y coordinate */\n centerY: number;\n}\n\n/**\n * Gets the common parent container of all items.\n *\n * All items must share the same parent, otherwise an error is thrown.\n * This is essential for coordinate transformations in alignment operations.\n *\n * @param items - Array of containers to check\n * @returns The common parent container\n * @throws {Error} If items don't have a parent or don't share the same parent\n *\n * @example\n * ```typescript\n * const parent = getCommonParent([sprite1, sprite2, sprite3]);\n * ```\n */\nexport function getCommonParent(items: Container[]): Container {\n const parent = items[0]?.parent as Container | undefined;\n if (!parent) throw new Error('Items must have a parent');\n for (const it of items) {\n if (it.parent !== parent) throw new Error('All items must share the same parent');\n }\n return parent;\n}\n\n/**\n * Calculates the bounds of a child container in its parent's coordinate space.\n *\n * This function handles coordinate transformations correctly, accounting for\n * rotation, scale, and skew of the child relative to the parent.\n *\n * @param child - The child container to measure\n * @param parent - The parent container (coordinate space reference)\n * @returns Bounds of the child in parent's local coordinates\n *\n * @example\n * ```typescript\n * const bounds = getLocalBoundsInParent(sprite, container);\n * console.log(`Width: ${bounds.width}, Height: ${bounds.height}`);\n * console.log(`Center: (${bounds.centerX}, ${bounds.centerY})`);\n * ```\n */\nexport function getLocalBoundsInParent(child: Container, parent: Container): BoundsLike {\n const world = child.getBounds();\n const topLeft = parent.toLocal(new Point(world.x, world.y));\n const bottomRight = parent.toLocal(new Point(world.x + world.width, world.y + world.height));\n const left = Math.min(topLeft.x, bottomRight.x);\n const right = Math.max(topLeft.x, bottomRight.x);\n const top = Math.min(topLeft.y, bottomRight.y);\n const bottom = Math.max(topLeft.y, bottomRight.y);\n const width = right - left;\n const height = bottom - top;\n return {\n left,\n right,\n top,\n bottom,\n width,\n height,\n centerX: left + width / 2,\n centerY: top + height / 2,\n };\n}\n\n/**\n * Calculates the combined bounding box of multiple containers.\n *\n * This creates a virtual container that encompasses all provided items,\n * similar to selecting multiple objects in Photoshop and seeing their combined bounds.\n *\n * @param items - Array of containers to measure\n * @param parent - Optional parent container for coordinate space (defaults to common parent)\n * @returns Combined bounds of all items\n *\n * @example\n * ```typescript\n * const bounds = getSelectionBounds([sprite1, sprite2, sprite3]);\n * console.log(`Selection size: ${bounds.width} x ${bounds.height}`);\n * console.log(`Selection center: (${bounds.centerX}, ${bounds.centerY})`);\n * ```\n */\nexport function getSelectionBounds(items: Container[], parent?: Container): BoundsLike {\n const p = parent ?? getCommonParent(items);\n let left = Infinity,\n right = -Infinity,\n top = Infinity,\n bottom = -Infinity;\n for (const it of items) {\n const b = getLocalBoundsInParent(it, p);\n left = Math.min(left, b.left);\n right = Math.max(right, b.right);\n top = Math.min(top, b.top);\n bottom = Math.max(bottom, b.bottom);\n }\n const width = right - left;\n const height = bottom - top;\n return {\n left,\n right,\n top,\n bottom,\n width,\n height,\n centerX: left + width / 2,\n centerY: top + height / 2,\n };\n}\n\nexport function getReferenceBounds(\n items: Container[],\n options?: AlignOptions,\n): { ref: BoundsLike; parent: Container } {\n if (options?.container) {\n const box = options.container;\n if (box instanceof Container) {\n const parent = box;\n const world = parent.getBounds();\n const topLeft = parent.toLocal(new Point(world.x, world.y));\n const bottomRight = parent.toLocal(new Point(world.x + world.width, world.y + world.height));\n const left = Math.min(topLeft.x, bottomRight.x);\n const right = Math.max(topLeft.x, bottomRight.x);\n const top = Math.min(topLeft.y, bottomRight.y);\n const bottom = Math.max(topLeft.y, bottomRight.y);\n const width = right - left;\n const height = bottom - top;\n return {\n ref: {\n left,\n right,\n top,\n bottom,\n width,\n height,\n centerX: left + width / 2,\n centerY: top + height / 2,\n },\n parent,\n };\n } else {\n const parent = getCommonParent(items);\n return { ref: rectToBoundsLike(box), parent };\n }\n }\n\n const parent = getCommonParent(items);\n if (options?.key) {\n if (options.key.parent !== parent) throw new Error('key and items must share the same parent');\n return { ref: getLocalBoundsInParent(options.key, parent), parent };\n }\n\n return { ref: getSelectionBounds(items, parent), parent };\n}\n\nexport function nudgeX(child: Container, dx: number) {\n child.x += dx;\n}\nexport function nudgeY(child: Container, dy: number) {\n child.y += dy;\n}\n","// Align.ts\nimport { Container } from 'pixi.js';\nimport { AlignOptions, getReferenceBounds, getLocalBoundsInParent, nudgeX, nudgeY } from './Bounds';\n\n/**\n * Alignment utility for positioning PixiJS containers, similar to Photoshop's align tools.\n *\n * Provides methods to align multiple containers relative to each other or to a reference point.\n * All alignment operations modify the position of containers in-place.\n *\n * ## Features\n *\n * - **Horizontal Alignment**: Left, center, right\n * - **Vertical Alignment**: Top, center, bottom\n * - **Flexible Reference**: Align to selection bounds, specific container, or custom rectangle\n * - **Parent-aware**: Handles coordinate transformations correctly\n *\n * ## Alignment Modes\n *\n * The alignment reference can be controlled via {@link AlignOptions}:\n * - `selection` (default): Align to the bounding box of all selected items\n * - `container`: Align to a specific container's bounds\n * - `key`: Align to a specific key object\n * - `rectangle`: Align to a custom rectangle\n *\n * @example\n * ```typescript\n * import { Align } from '@rb-games/core/layout';\n * import { Container, Sprite } from 'pixi.js';\n *\n * // Create some sprites\n * const sprite1 = new Sprite();\n * const sprite2 = new Sprite();\n * const sprite3 = new Sprite();\n *\n * const container = new Container();\n * container.addChild(sprite1, sprite2, sprite3);\n *\n * // Align all sprites to the left edge of their selection\n * Align.left([sprite1, sprite2, sprite3]);\n *\n * // Align horizontally centered\n * Align.hCenter([sprite1, sprite2, sprite3]);\n *\n * // Align to a specific container\n * const bounds = new Container();\n * Align.left([sprite1, sprite2, sprite3], { container: bounds });\n * ```\n *\n * @example\n * ```typescript\n * // Align UI elements to screen center\n * const title = new Text('Game Title');\n * const button = new Sprite();\n * const logo = new Sprite();\n *\n * // Center all elements horizontally to screen bounds\n * Align.hCenter([title, button, logo], {\n * rect: new Rectangle(0, 0, 1920, 1080)\n * });\n *\n * // Align to top\n * Align.top([title, button, logo]);\n * ```\n *\n * @category Layout\n * @public\n */\nexport class Align {\n /**\n * Aligns containers to the left edge of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n *\n * @example\n * ```typescript\n * // Align to selection bounds (default)\n * Align.left([sprite1, sprite2, sprite3]);\n *\n * // Align to container\n * Align.left([sprite1, sprite2], { container: bounds });\n * ```\n */\n static left(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, ref.left - b.left);\n }\n }\n /**\n * Aligns containers to the horizontal center of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n *\n * @example\n * ```typescript\n * // Center horizontally within selection\n * Align.hCenter([sprite1, sprite2, sprite3]);\n * ```\n */\n static hCenter(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, ref.centerX - b.centerX);\n }\n }\n /**\n * Aligns containers to the right edge of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n */\n static right(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, ref.right - b.right);\n }\n }\n /**\n * Aligns containers to the top edge of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n */\n static top(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, ref.top - b.top);\n }\n }\n /**\n * Aligns containers to the vertical center of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n */\n static vCenter(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, ref.centerY - b.centerY);\n }\n }\n /**\n * Aligns containers to the bottom edge of the reference bounds.\n *\n * @param items - Array of containers to align\n * @param options - Alignment options to control the reference point\n */\n static bottom(items: Container[], options?: AlignOptions) {\n const { ref, parent } = getReferenceBounds(items, options);\n for (const it of items) {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, ref.bottom - b.bottom);\n }\n }\n}\n","// Distribute.ts\nimport { Container, Rectangle } from 'pixi.js';\nimport {\n getLocalBoundsInParent,\n getSelectionBounds,\n nudgeX,\n nudgeY,\n getCommonParent,\n} from './Bounds';\n\n/**\n * Distribution utility for evenly spacing PixiJS containers, similar to Photoshop's distribute tools.\n *\n * Provides methods to distribute multiple containers with equal spacing between them,\n * either by edges, centers, or with equal gaps. All distribution operations modify\n * container positions in-place.\n *\n * ## Features\n *\n * - **Horizontal Distribution**: By left edges, centers, right edges, or spacing\n * - **Vertical Distribution**: By top edges, centers, bottom edges, or spacing\n * - **Auto-sorting**: Automatically sorts items before distributing\n * - **Minimum 3 items**: Requires at least 3 items (first and last act as anchors)\n *\n * ## Distribution Types\n *\n * ### Edge Distribution\n * Distributes items so their edges are evenly spaced:\n * - `hLeft()`, `hRight()`: Horizontal by left/right edges\n * - `vTop()`, `vBottom()`: Vertical by top/bottom edges\n *\n * ### Center Distribution\n * Distributes items so their centers are evenly spaced:\n * - `hCenters()`: Horizontal centers\n * - `vCenters()`: Vertical centers\n *\n * ### Spacing Distribution\n * Distributes items with equal gaps between them:\n * - `hSpacing()`: Equal horizontal gaps\n * - `vSpacing()`: Equal vertical gaps\n *\n * @example\n * ```typescript\n * import { Distribute } from '@rb-games/core/layout';\n * import { Container, Sprite } from 'pixi.js';\n *\n * // Create some sprites\n * const sprites = [\n * new Sprite(),\n * new Sprite(),\n * new Sprite(),\n * new Sprite()\n * ];\n *\n * const container = new Container();\n * container.addChild(...sprites);\n *\n * // Distribute horizontally by centers\n * Distribute.hCenters(sprites);\n *\n * // Distribute vertically with equal spacing\n * Distribute.vSpacing(sprites);\n *\n * // Distribute horizontally by left edges\n * Distribute.hLeft(sprites);\n * ```\n *\n * @example\n * ```typescript\n * // Distribute UI buttons with equal spacing\n * const buttons = [button1, button2, button3, button4];\n *\n * // Equal horizontal spacing between buttons\n * Distribute.hSpacing(buttons);\n *\n * // Distribute within a specific rectangle\n * Distribute.hSpacing(buttons, {\n * container: new Rectangle(100, 100, 800, 100)\n * });\n * ```\n *\n * @public\n */\nexport class Distribute {\n static hLeft(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).left - getLocalBoundsInParent(b, parent).left,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).left;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).left;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, first + step * i - b.left);\n });\n }\n\n static hCenters(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) =>\n getLocalBoundsInParent(a, parent).centerX - getLocalBoundsInParent(b, parent).centerX,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).centerX;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).centerX;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, first + step * i - b.centerX);\n });\n }\n\n static hRight(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).right - getLocalBoundsInParent(b, parent).right,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).right;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).right;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, first + step * i - b.right);\n });\n }\n\n static vTop(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).top - getLocalBoundsInParent(b, parent).top,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).top;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).top;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, first + step * i - b.top);\n });\n }\n\n static vCenters(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) =>\n getLocalBoundsInParent(a, parent).centerY - getLocalBoundsInParent(b, parent).centerY,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).centerY;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).centerY;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, first + step * i - b.centerY);\n });\n }\n\n static vBottom(items: Container[], options?: { parent?: Container }) {\n const parent = options?.parent ?? getCommonParent(items);\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).bottom - getLocalBoundsInParent(b, parent).bottom,\n );\n if (sorted.length <= 2) return;\n const first = getLocalBoundsInParent(sorted[0], parent).bottom;\n const last = getLocalBoundsInParent(sorted[sorted.length - 1], parent).bottom;\n const step = (last - first) / (sorted.length - 1);\n sorted.forEach((it, i) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, first + step * i - b.bottom);\n });\n }\n\n static hSpacing(items: Container[], options?: { parent?: Container; container?: Rectangle }) {\n const parent = options?.parent ?? getCommonParent(items);\n if (items.length <= 2) return;\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).left - getLocalBoundsInParent(b, parent).left,\n );\n const ref = options?.container ?? getSelectionBounds(sorted, parent);\n const totalWidth = sorted.reduce(\n (sum, it) => sum + getLocalBoundsInParent(it, parent).width,\n 0,\n );\n const width = ref instanceof Rectangle ? ref.width : ref.width;\n const left = ref instanceof Rectangle ? ref.x : ref.left;\n const gap = (width - totalWidth) / (sorted.length - 1);\n let cursor = left;\n sorted.forEach((it) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeX(it, cursor - b.left);\n const newB = getLocalBoundsInParent(it, parent);\n cursor = newB.right + gap;\n });\n }\n\n static vSpacing(items: Container[], options?: { parent?: Container; container?: Rectangle }) {\n const parent = options?.parent ?? getCommonParent(items);\n if (items.length <= 2) return;\n const sorted = [...items].sort(\n (a, b) => getLocalBoundsInParent(a, parent).top - getLocalBoundsInParent(b, parent).top,\n );\n const ref = options?.container ?? getSelectionBounds(sorted, parent);\n const totalHeight = sorted.reduce(\n (sum, it) => sum + getLocalBoundsInParent(it, parent).height,\n 0,\n );\n const height = ref instanceof Rectangle ? ref.height : ref.height;\n const top = ref instanceof Rectangle ? ref.y : ref.top;\n const gap = (height - totalHeight) / (sorted.length - 1);\n let cursor = top;\n sorted.forEach((it) => {\n const b = getLocalBoundsInParent(it, parent);\n nudgeY(it, cursor - b.top);\n const newB = getLocalBoundsInParent(it, parent);\n cursor = newB.bottom + gap;\n });\n }\n}\n","import { Container, Point, Rectangle } from 'pixi.js';\nimport {\n BoundsLike,\n getCommonParent,\n getLocalBoundsInParent,\n getSelectionBounds,\n nudgeX,\n nudgeY,\n} from './Bounds';\n\n/**\n * Flow direction for layout.\n * - `row`: Horizontal layout (left to right)\n * - `column`: Vertical layout (top to bottom)\n */\nexport type FlowDirection = 'row' | 'column';\n\n/**\n * Wrapping behavior for flow layout.\n * - `none`: No wrapping, single line/column\n * - `bounds`: Wrap when reaching bounds width/height\n * - `count`: Wrap after specific number of items\n */\nexport type FlowWrap = 'none' | 'bounds' | 'count';\n\n/**\n * Cross-axis alignment (perpendicular to flow direction).\n * - `start`: Align to start of line/column\n * - `center`: Center within line/column\n * - `end`: Align to end of line/column\n */\nexport type FlowAlign = 'start' | 'center' | 'end';\n\n/**\n * Main-axis justification (along flow direction).\n * - `start`: Pack items to start\n * - `center`: Center items\n * - `end`: Pack items to end\n * - `space-between`: Equal space between items\n * - `space-around`: Equal space around items\n * - `space-evenly`: Equal space including edges\n */\nexport type FlowJustify =\n | 'start'\n | 'center'\n | 'end'\n | 'space-between'\n | 'space-around'\n | 'space-evenly';\n\n/**\n * Individual item margin configuration.\n * Supports shorthand notations:\n * - `x`: Sets both left and right\n * - `y`: Sets both top and bottom\n * - Specific values (top, right, bottom, left) override shorthands\n */\nexport interface FlowItemMargin {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n x?: number;\n y?: number;\n}\n\n/**\n * Margin value for a single item.\n * - `number`: All sides get the same margin\n * - `FlowItemMargin`: Detailed control with optional shorthands\n * - `undefined`: No margin (all sides = 0)\n */\nexport type FlowItemMarginValue = number | FlowItemMargin | undefined;\n\n/**\n * Configuration options for flow layout.\n *\n * @example\n * ```typescript\n * const options: FlowOptions = {\n * direction: 'row',\n * wrap: 'bounds',\n * gap: 10,\n * justify: 'space-between',\n * align: 'center',\n * padding: 20,\n * margins: [10, 0, { y: 15 }]\n * };\n * ```\n */\nexport interface FlowOptions {\n direction?: FlowDirection;\n wrap?: FlowWrap;\n gap?: number | { h: number; v: number };\n rowGap?: number;\n columnGap?: number;\n justify?: FlowJustify;\n align?: FlowAlign;\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n bounds?: Container | Rectangle;\n rowCount?: number;\n columnCount?: number;\n order?: (a: Container, b: Container) => number;\n margins?: FlowItemMarginValue[];\n}\n\ntype HV = { h: number; v: number };\n\nfunction normalizeGap(opts: FlowOptions): HV {\n if (typeof opts.gap === 'number') return { h: opts.gap, v: opts.gap };\n if (typeof opts.gap === 'object' && opts.gap) return { h: opts.gap.h ?? 0, v: opts.gap.v ?? 0 };\n const h = opts.columnGap ?? 0;\n const v = opts.rowGap ?? 0;\n return { h, v };\n}\n\nfunction normalizePadding(\n p?: number | { top?: number; right?: number; bottom?: number; left?: number },\n) {\n if (typeof p === 'number') return { top: p, right: p, bottom: p, left: p };\n return { top: p?.top ?? 0, right: p?.right ?? 0, bottom: p?.bottom ?? 0, left: p?.left ?? 0 };\n}\n\nfunction normalizeMargin(value: FlowItemMarginValue): {\n top: number;\n right: number;\n bottom: number;\n left: number;\n} {\n if (value === undefined) {\n return { top: 0, right: 0, bottom: 0, left: 0 };\n }\n\n if (typeof value === 'number') {\n return { top: value, right: value, bottom: value, left: value };\n }\n\n const top = value.top ?? value.y ?? 0;\n const bottom = value.bottom ?? value.y ?? 0;\n const left = value.left ?? value.x ?? 0;\n const right = value.right ?? value.x ?? 0;\n\n return { top, right, bottom, left };\n}\n\nfunction getFlowBounds(items: Container[], opts: FlowOptions, parent: Container): Rectangle {\n const pad = normalizePadding(opts.padding);\n if (opts.wrap === 'bounds' && opts.bounds) {\n let r: Rectangle;\n if (opts.bounds instanceof Rectangle) {\n r = opts.bounds;\n } else {\n const b = getLocalBoundsInParent(opts.bounds, parent);\n r = new Rectangle(b.left, b.top, b.width, b.height);\n }\n return new Rectangle(\n r.x + pad.left,\n r.y + pad.top,\n Math.max(0, r.width - pad.left - pad.right),\n Math.max(0, r.height - pad.top - pad.bottom),\n );\n }\n const sel = getSelectionBounds(items, parent);\n return new Rectangle(\n // TODO Not sure side effects check this out latter\n /*sel.left +*/ pad.left,\n /*sel.top + */ pad.top,\n Math.max(0, sel.width - pad.left - pad.right),\n Math.max(0, sel.height - pad.top - pad.bottom),\n );\n}\n\n/**\n * Flexbox-like layout utility for arranging PixiJS containers in rows or columns.\n *\n * Flow provides a powerful layout system similar to CSS Flexbox, allowing you to\n * arrange containers horizontally or vertically with automatic wrapping, spacing,\n * alignment, and justification.\n *\n * ## Features\n *\n * - **Flexible Direction**: Row (horizontal) or column (vertical) layouts\n * - **Smart Wrapping**: No wrap, wrap by bounds, or wrap by count\n * - **Spacing Control**: Gaps between items, padding around container\n * - **Alignment**: Start, center, end alignment on cross-axis\n * - **Justification**: Start, center, end, space-between, space-around, space-evenly\n * - **Custom Sorting**: Optional custom order function\n *\n * ## Layout Modes\n *\n * ### Row Layout (Horizontal)\n * Items flow left to right, wrapping creates new rows below.\n * - Main axis: Horizontal (justify controls)\n * - Cross axis: Vertical (align controls)\n *\n * ### Column Layout (Vertical)\n * Items flow top to bottom, wrapping creates new columns to the right.\n * - Main axis: Vertical (justify controls)\n * - Cross axis: Horizontal (align controls)\n *\n * ## Wrapping Modes\n *\n * - **none**: Single line/column, no wrapping\n * - **bounds**: Wrap when reaching container bounds\n * - **count**: Wrap after specific number of items (rowCount/columnCount)\n *\n * @example\n * ```typescript\n * import { Flow } from '@rb-games/core/layout';\n * import { Container, Sprite } from 'pixi.js';\n *\n * // Create inventory grid\n * const items = Array.from({ length: 20 }, () => new Sprite());\n * const container = new Container();\n * container.addChild(...items);\n *\n * // Grid layout: 5 columns, wrap by count\n * Flow.layout(items, {\n * direction: 'row',\n * wrap: 'count',\n * columnCount: 5,\n * gap: 10,\n * padding: 20\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Responsive horizontal menu with wrapping\n * const menuItems = [item1, item2, item3, item4, item5];\n *\n * Flow.layout(menuItems, {\n * direction: 'row',\n * wrap: 'bounds',\n * bounds: new Rectangle(0, 0, 800, 600),\n * gap: 15,\n * justify: 'space-between',\n * align: 'center',\n * padding: { top: 10, right: 20, bottom: 10, left: 20 }\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Vertical button list\n * const buttons = [btn1, btn2, btn3];\n *\n * Flow.layout(buttons, {\n * direction: 'column',\n * wrap: 'none',\n * gap: 10,\n * align: 'center',\n * justify: 'start'\n * });\n * ```\n *\n * @public\n */\nexport class Flow {\n /**\n * Arranges containers in a flexbox-like layout.\n *\n * This method modifies container positions in-place to create the desired layout.\n * Items are sorted (if order function provided) and then arranged according to\n * direction, wrapping, alignment, and justification settings.\n *\n * @param items - Array of containers to layout\n * @param options - Layout configuration options\n *\n * @example\n * ```typescript\n * // Simple horizontal row\n * Flow.layout(items, { direction: 'row', gap: 10 });\n *\n * // Grid with 4 columns\n * Flow.layout(items, {\n * direction: 'row',\n * wrap: 'count',\n * columnCount: 4,\n * gap: { h: 10, v: 15 }\n * });\n *\n * // Centered vertical list\n * Flow.layout(items, {\n * direction: 'column',\n * align: 'center',\n * gap: 20\n * });\n * ```\n */\n static layout(items: Container[], options?: FlowOptions) {\n if (!items || items.length === 0) return;\n const opts: FlowOptions = {\n direction: 'row',\n wrap: 'none',\n gap: 0,\n justify: 'start',\n align: 'start',\n ...options,\n };\n\n const parent = getCommonParent(items);\n const gap = normalizeGap(opts);\n const dir = opts.direction ?? 'row';\n const wrap = opts.wrap ?? 'none';\n const ordered = opts.order ? [...items].sort(opts.order) : [...items];\n const area = getFlowBounds(ordered, opts, parent);\n\n if (wrap === 'count') {\n if (dir === 'row') {\n const cols =\n opts.columnCount ??\n (opts.rowCount ? Math.ceil(ordered.length / opts.rowCount) : ordered.length);\n const lines: Container[][] = [];\n for (let i = 0; i < ordered.length; i += cols) lines.push(ordered.slice(i, i + cols));\n layoutLinesRow(lines, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n } else {\n const rows =\n opts.rowCount ??\n (opts.columnCount ? Math.ceil(ordered.length / opts.columnCount) : ordered.length);\n const columns: Container[][] = [];\n for (let i = 0; i < ordered.length; i += rows) columns.push(ordered.slice(i, i + rows));\n layoutLinesColumn(columns, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n }\n return;\n }\n\n if (wrap === 'bounds') {\n if (dir === 'row') {\n const lines: Container[][] = [];\n let line: Container[] = [];\n let lineW = 0;\n for (const it of ordered) {\n const b = getLocalBoundsInParent(it, parent);\n const needed = line.length === 0 ? b.width : gap.h + b.width;\n if (line.length > 0 && lineW + needed > area.width) {\n lines.push(line);\n line = [it];\n lineW = b.width;\n } else {\n line.push(it);\n lineW += needed;\n }\n }\n if (line.length) lines.push(line);\n layoutLinesRow(lines, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n } else {\n const columns: Container[][] = [];\n let col: Container[] = [];\n let colH = 0;\n for (const it of ordered) {\n const b = getLocalBoundsInParent(it, parent);\n const needed = col.length === 0 ? b.height : gap.v + b.height;\n if (col.length > 0 && colH + needed > area.height) {\n columns.push(col);\n col = [it];\n colH = b.height;\n } else {\n col.push(it);\n colH += needed;\n }\n }\n if (col.length) columns.push(col);\n layoutLinesColumn(columns, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n }\n return;\n }\n\n if (wrap === 'none') {\n if (dir === 'row') {\n const lines = [ordered];\n layoutLinesRow(lines, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n } else {\n const columns = [ordered];\n layoutLinesColumn(columns, parent, area, gap, opts.justify!, opts.align!, opts.margins);\n }\n }\n }\n}\n\nfunction layoutLinesRow(\n lines: Container[][],\n parent: Container,\n area: Rectangle,\n gap: HV,\n justify: FlowJustify,\n align: FlowAlign,\n margins?: FlowItemMarginValue[],\n) {\n let y = area.y;\n for (const line of lines) {\n let contentW = 0;\n let lineH = 0;\n const sizes = line.map((it) => {\n const b = getLocalBoundsInParent(it, parent);\n lineH = Math.max(lineH, b.height);\n return b;\n });\n if (line.length > 0) contentW = sizes.reduce((s, b, i) => s + b.width + (i > 0 ? gap.h : 0), 0);\n let x = area.x;\n if (justify === 'center') {\n x += Math.max(0, (area.width - contentW) / 2);\n } else if (justify === 'end') {\n x += Math.max(0, area.width - contentW);\n } else if (justify === 'space-between' && line.length > 1) {\n const free = Math.max(0, area.width - sizes.reduce((s, b) => s + b.width, 0));\n const g = free / (line.length - 1);\n positionRow(line, sizes, parent, x, y, lineH, { h: g, v: gap.v }, align, margins);\n y += lineH + gap.v;\n continue;\n } else if (justify === 'space-around' && line.length > 0) {\n const free = Math.max(0, area.width - sizes.reduce((s, b) => s + b.width, 0));\n const g = free / line.length;\n x += g / 2;\n positionRow(line, sizes, parent, x, y, lineH, { h: g, v: gap.v }, align, margins);\n y += lineH + gap.v;\n continue;\n } else if (justify === 'space-evenly' && line.length > 0) {\n const free = Math.max(0, area.width - sizes.reduce((s, b) => s + b.width, 0));\n const g = free / (line.length + 1);\n x += g;\n positionRow(line, sizes, parent, x, y, lineH, { h: g, v: gap.v }, align, margins);\n y += lineH + gap.v;\n continue;\n }\n positionRow(line, sizes, parent, x, y, lineH, gap, align, margins);\n y += lineH + gap.v;\n }\n}\n\nfunction positionRow(\n line: Container[],\n sizes: BoundsLike[],\n parent: Container,\n x: number,\n y: number,\n lineH: number,\n gap: HV,\n align: FlowAlign,\n margins?: FlowItemMarginValue[],\n) {\n let cursor = x;\n for (let i = 0; i < line.length; i++) {\n const it = line[i];\n const b = sizes[i];\n const margin = normalizeMargin(margins?.[i]);\n\n const dx = cursor + margin.left - b.left;\n let dy = 0;\n if (align === 'start') dy = y + margin.top - b.top;\n else if (align === 'center') dy = y + margin.top + (lineH - b.height) / 2 - b.top;\n else dy = y + margin.top + (lineH - b.height) - b.top;\n nudgeX(it, dx);\n nudgeY(it, dy);\n cursor += margin.left + b.width + margin.right + gap.h;\n }\n}\n\nfunction layoutLinesColumn(\n columns: Container[][],\n parent: Container,\n area: Rectangle,\n gap: HV,\n justify: FlowJustify,\n align: FlowAlign,\n margins?: FlowItemMarginValue[],\n) {\n let x = area.x;\n for (const col of columns) {\n let contentH = 0;\n let colW = 0;\n const sizes = col.map((it) => {\n const b = getLocalBoundsInParent(it, parent);\n colW = Math.max(colW, b.width);\n return b;\n });\n if (col.length > 0) contentH = sizes.reduce((s, b, i) => s + b.height + (i > 0 ? gap.v : 0), 0);\n let y = area.y;\n if (justify === 'center') {\n y += Math.max(0, (area.height - contentH) / 2);\n } else if (justify === 'end') {\n y += Math.max(0, area.height - contentH);\n } else if (justify === 'space-between' && col.length > 1) {\n const free = Math.max(0, area.height - sizes.reduce((s, b) => s + b.height, 0));\n const g = free / (col.length - 1);\n positionColumn(col, sizes, parent, x, y, colW, { h: gap.h, v: g }, align, margins);\n x += colW + gap.h;\n continue;\n } else if (justify === 'space-around' && col.length > 0) {\n const free = Math.max(0, area.height - sizes.reduce((s, b) => s + b.height, 0));\n const g = free / col.length;\n y += g / 2;\n positionColumn(col, sizes, parent, x, y, colW, { h: gap.h, v: g }, align, margins);\n x += colW + gap.h;\n continue;\n } else if (justify === 'space-evenly' && col.length > 0) {\n const free = Math.max(0, area.height - sizes.reduce((s, b) => s + b.height, 0));\n const g = free / (col.length + 1);\n y += g;\n positionColumn(col, sizes, parent, x, y, colW, { h: gap.h, v: g }, align, margins);\n x += colW + gap.h;\n continue;\n }\n positionColumn(col, sizes, parent, x, y, colW, gap, align, margins);\n x += colW + gap.h;\n }\n}\n\nfunction positionColumn(\n col: Container[],\n sizes: BoundsLike[],\n parent: Container,\n x: number,\n y: number,\n colW: number,\n gap: HV,\n align: FlowAlign,\n margins?: FlowItemMarginValue[],\n) {\n let cursor = y;\n for (let i = 0; i < col.length; i++) {\n const it = col[i];\n const b = sizes[i];\n const margin = normalizeMargin(margins?.[i]);\n\n let dx = 0;\n if (align === 'start') dx = x + margin.left - b.left;\n else if (align === 'center') dx = x + margin.left + (colW - b.width) / 2 - b.left;\n else dx = x + margin.left + (colW - b.width) - b.left;\n const dy = cursor + margin.top - b.top;\n nudgeX(it, dx);\n nudgeY(it, dy);\n cursor += margin.top + b.height + margin.bottom + gap.v;\n }\n}\n","/**\n * Position utility types and functions for CSS-like positioning.\n * Supports keywords (center, top, bottom, left, right), percentages, and numbers.\n */\n\n// Position type definitions\ntype PositionKeyword = 'center' | 'top' | 'bottom' | 'left' | 'right';\ntype NumberPercent = `${number}%`;\ntype NumberString = `${number}`;\ntype SinglePositionValue = PositionKeyword | NumberPercent | NumberString;\ntype TwoPositionValue = `${string} ${string}`;\n\nexport type PositionValue = SinglePositionValue | TwoPositionValue | number;\n\n/**\n * Resolves a single position value to pixels.\n * Assumes pivot/anchor is at (0, 0).\n *\n * @param value - Position value (keyword, percentage, or number)\n * @param axis - Which axis this value applies to ('x' or 'y')\n * @param viewportSize - Size of the viewport/container on this axis\n * @param sourceScaledSize - Size of the source element (after scaling) on this axis\n * @returns Resolved pixel position\n */\nexport function resolvePositionValue(\n value: string | number,\n axis: 'x' | 'y',\n viewportSize: number,\n sourceScaledSize: number\n): number {\n if (typeof value === 'number') {\n return value;\n }\n\n const trimmed = value.trim();\n\n // Percentage value\n if (trimmed.endsWith('%')) {\n const percent = parseFloat(trimmed) / 100;\n // For pivot (0,0): position = viewport * percent - source * percent\n return viewportSize * percent - sourceScaledSize * percent;\n }\n\n // Keyword values\n switch (trimmed) {\n case 'center':\n return (viewportSize - sourceScaledSize) / 2;\n case 'top':\n return axis === 'y' ? 0 : (viewportSize - sourceScaledSize) / 2;\n case 'bottom':\n return axis === 'y' ? viewportSize - sourceScaledSize : (viewportSize - sourceScaledSize) / 2;\n case 'left':\n return axis === 'x' ? 0 : (viewportSize - sourceScaledSize) / 2;\n case 'right':\n return axis === 'x' ? viewportSize - sourceScaledSize : (viewportSize - sourceScaledSize) / 2;\n default:\n // Try parsing as number\n const num = parseFloat(trimmed);\n return isNaN(num) ? 0 : num;\n }\n}\n\n/**\n * Resolves a position string to x, y coordinates.\n * Supports: \"center\", \"center top\", \"50%\", \"50% 0\", 0\n *\n * @param position - Position value (string or number)\n * @param viewportWidth - Width of the viewport/container\n * @param viewportHeight - Height of the viewport/container\n * @param sourceScaledWidth - Width of the source element (after scaling)\n * @param sourceScaledHeight - Height of the source element (after scaling)\n * @returns Object with x and y pixel coordinates\n *\n * @example\n * ```typescript\n * // Center on both axes\n * resolvePosition(\"center\", 1920, 1080, 800, 600);\n * // { x: 560, y: 240 }\n *\n * // Center horizontally, top vertically\n * resolvePosition(\"center top\", 1920, 1080, 800, 600);\n * // { x: 560, y: 0 }\n *\n * // 50% on both axes (same as center for pivot 0,0)\n * resolvePosition(\"50%\", 1920, 1080, 800, 600);\n * // { x: 560, y: 240 }\n *\n * // Fixed position\n * resolvePosition(100, 1920, 1080, 800, 600);\n * // { x: 100, y: 100 }\n * ```\n */\nexport function resolvePosition(\n position: PositionValue,\n viewportWidth: number,\n viewportHeight: number,\n sourceScaledWidth: number,\n sourceScaledHeight: number\n): { x: number; y: number } {\n // Number - same value for both axes\n if (typeof position === 'number') {\n return { x: position, y: position };\n }\n\n const parts = position.trim().split(/\\s+/);\n\n if (parts.length === 1) {\n // Single value - apply to both axes\n const val = parts[0];\n return {\n x: resolvePositionValue(val, 'x', viewportWidth, sourceScaledWidth),\n y: resolvePositionValue(val, 'y', viewportHeight, sourceScaledHeight),\n };\n }\n\n // Two values - first is x, second is y\n return {\n x: resolvePositionValue(parts[0], 'x', viewportWidth, sourceScaledWidth),\n y: resolvePositionValue(parts[1], 'y', viewportHeight, sourceScaledHeight),\n };\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,12 +1,7 @@
1
+ import { __export } from '../chunk-G3PMV62Z.js';
1
2
  import { Texture, Ticker, Point, Sprite, Container } from 'pixi.js';
2
3
  import { Spine } from '@esotericsoftware/spine-pixi-v8';
3
4
 
4
- var __defProp = Object.defineProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
-
10
5
  // particle/ParticleUtils.ts
11
6
  var ParticleUtils_exports = {};
12
7
  __export(ParticleUtils_exports, {