@p4ulcristian/iris-layout 0.2.5 → 0.2.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["iris_layout/core.cljs"],"mappings":"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","names":["iris-layout.core/generate-id","cljs.core/random-uuid","iris-layout.core/js->layout","js-obj","obj","cljs.core.js__GT_clj","G__6894","cljs.core.keyword","cljs.core.get","cljs.core.assoc","cljs.core.mapv","or__5002__auto__","iris-layout.core/layout->js","layout","cljs.core/clj->js","G__6895","cljs.core/name","iris-layout.core/js->entities","cljs.core.into","cljs.core.map","p__6896","vec__6897","cljs.core.nth","k","v","cljs.core/map?","p__6900","vec__6901","k2","v2","iris-layout.core/js->stages","js-arr","s","iris-layout.core/stages->js","stages","iris-layout.core/body-stage-component","_","props-ref","cljs.core.atom","handle-split","tile-id","entity-id","split-direction","source-type","half","map__6904","cljs.core/deref","cljs.core/--destructure-map","on-layout-change","before?","cljs.core._EQ_","base-layout","iris-layout.layout/remove-entity-from-layout","target-after","iris-layout.layout/find-tile","new-tile-id","split-id","new-layout","iris_layout.layout.split_tile","and__5000__auto__","handle-close","map__6905","on-entity-close","handle-ratio","new-ratio","map__6906","iris-layout.layout/update-split-ratio","p__6907","map__6908","entities","render-entity-tile","active-entity","props","cljs.core/reset!","iris-layout.components.entity-tile-group/entity-tile-group","iris-layout.core/stage-index","id","cljs.core/first","cljs.core.keep_indexed","i","iris-layout.core/restart-animation!","el","anim-name","iris-layout.core/body-component","prev-stage-id","slide-dir","layer-refs","p__6909","map__6910","active-stage","on-stages-change","on-active-stage-change","on-active-entity-change","prev-idx","curr-idx","changed?","cljs.core.not_EQ_","dir","target-id","reagent.core/after-render","temp__5804__auto__","iter__5480__auto__","s__6912","cljs.core/LazySeq","cljs.core/seq","cljs.core/chunked-seq?","c__5478__auto__","size__5479__auto__","cljs.core/count","b__6914","cljs.core/chunk-buffer","i__6913","cljs.core/-nth","cljs.core/chunk-append","cljs.core/chunk-cons","cljs.core/chunk","iter__6911","cljs.core/chunk-rest","cljs.core/cons","cljs.core/rest","stage","cljs.core.swap_BANG_","cljs.core/assoc","updated","p__6915","vec__6916","iris-layout.core/pos-key","x","y","iris-layout.core/direction->delta","G__6919","cljs.core/Keyword","js/Error","iris-layout.core/grid-dimensions","workspaces","cljs.core/empty?","positions","parts","js/parseInt","cljs.core/keys","max-x","cljs.core.apply","cljs.core/max","max-y","cljs.core/second","iris-layout.core/can-navigate?","active-position","vec__6920","vec__6923","dx","dy","new-x","new-y","new-key","active-key","current-empty?","target-exists?","cljs.core/contains?","target-has-layout?","cljs.core/not","iris-layout.core/handle-grid-nav","map__6926","on-workspaces-change","on-active-position-change","vec__6927","vec__6930","new-pos","G__6933","iris-layout.core/nav-edge-hiccup","css-class","arrow","visible?","on-click","direction","nav-drag-edge","e","iris-layout.core/update-workspaces-with-cleanup","target-key","dragged-entity","iris-layout.components.entity-tile/drag-source-entity","cljs.core/reduce-kv","acc","ws-key","ws-data","cleaned","iris-layout.core/handle-empty-workspace-drop","raw","e6934","data","js/JSON.parse","iris-layout.core/grid-cell","workspace","active?","zoomed?","map__6935","vec__6936","G__6939","G__6940","iris-layout.core/grid-canvas","cols","rows","s__6942","b__6944","i__6943","iter__6941","cljs.core.range","s__6946","b__6948","i__6947","iter__6945","s__6950","b__6952","i__6951","iter__6949","iris-layout.core/grid-gap","iris-layout.core/camera-style","vec__6953","ax","ay","scale","x__5087__auto__","y__5088__auto__","tx","ty","iris-layout.core/grid-component","zoomed-out?","reagent.core.atom","handle-nav","keydown-handler","G__6956","keyup-handler","js/document","cljs.core/add-watch","iris-layout.components.touch-drag/nav-edge-target","old-dir","new-dir","p__6957","map__6958","vec__6959","dragging?","iris-layout.components.entity-tile/drag-source-tile","iris-layout.components.touch-drag/touch-state","vis?","iris-layout.core/js->workspaces","p__6962","vec__6963","iris-layout.core/workspaces->js","p__6966","vec__6967","p__6970","map__6971","iris-layout.core/grid-wrapper","activePosition","activeEntity","renderEntityTile","onWorkspacesChange","onActivePositionChange","onActiveEntityChange","onEntityClose","new-workspaces","G__6972","G__6973","iris-layout.core/remove-entity-from-stages","source-stage-id","source-stage","p1__6974#","cljs.core.filter","empty?","cljs.core/vec","p1__6975#","cljs.core.remove","iris-layout.core/sidebar-component","drag-over","p__6977","map__6978","render-entity-card","e6979","vec__6980","new-stage-id","new-stage","G__6983","cljs.core.conj","s__6985","b__6987","i__6986","p1__6976#","iter__6984","iris-layout.components.entity-card-group/entity-card-group-component","G__6992","G__7003","vec__6993","vec__7004","G__6996","G__7007","G__6997","G__6998","G__7008","G__7009","vec__6988","vec__6999","source-empty?","iris-layout.layout/append-entity","G__6991","G__7002","p__7010","map__7011","iris-layout.core/body-wrapper","activeStage","onStagesChange","onActiveStageChange","new-stages","G__7012","p__7013","map__7014","iris-layout.core/sidebar-wrapper","renderEntityCard","G__7015","iris-layout.core/Sidebar","reagent.core.reactify_component","iris-layout.core/Body","iris-layout.core/Grid","cljs.core/chunk-first"],"sourcesContent":["(ns iris-layout.core\n \"iris-layout \u2014 a tiling layout library for React.\n\n Exports two React components:\n - `Sidebar` : Renders stage cards with draggable entity cards\n - `Body` : Renders the layout surface with resizable, rearrangeable entity tiles\n\n Both components accept the same props object:\n ```js\n {\n stages: [{id, label, layout}], // Array of stage definitions\n activeStage: 'stage-id', // Currently active stage ID\n activeEntity: 'entity-id', // Currently focused entity ID\n entities: {id: {id, name, ...}}, // Entity data map\n renderEntityCard: ReactComponent, // Compact card for sidebar\n renderEntityTile: ReactComponent, // Full content for body tiles\n onStagesChange: fn(stages), // Layout mutations callback\n onActiveStageChange: fn(stageId), // Stage switch callback\n onActiveEntityChange: fn(entityId), // Entity focus callback\n }\n ```\n\n Layout tree structure (nested):\n - Tile: {type: 'tile', id: str, entityId: str}\n - Split: {type: 'split', id: str, direction: 'horizontal'|'vertical',\n ratio: 0.0-1.0, children: [node, node]}\"\n (:require [reagent.core :as r]\n [iris-layout.layout :as layout]\n [iris-layout.components.entity-tile-group :as entity-tile-group]\n [iris-layout.components.entity-card-group :as entity-card-group]\n [iris-layout.components.entity-tile :as entity-tile]\n [iris-layout.components.touch-drag :as touch-drag]))\n\n;; ============================================================\n;; JS <-> CLJS boundary conversion\n;; ============================================================\n\n(defn- generate-id []\n (str \"iris-\" (random-uuid)))\n\n(defn js->layout\n \"Convert a JS layout object to a CLJS layout map.\n Handles recursive conversion of the tree structure.\n JS keys: type, id, direction, ratio, children, entityId\n CLJS keys: :type, :id, :direction, :ratio, :children, :entity-id\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (cond-> {:type (keyword (get obj \"type\"))\n :id (get obj \"id\")}\n (get obj \"direction\") (assoc :direction (keyword (get obj \"direction\")))\n (get obj \"ratio\") (assoc :ratio (get obj \"ratio\"))\n (get obj \"children\") (assoc :children (mapv js->layout (get obj \"children\")))\n (or (get obj \"entityId\")\n (get obj \"entity-id\")) (assoc :entity-id (or (get obj \"entityId\")\n (get obj \"entity-id\")))))))\n\n(defn layout->js\n \"Convert a CLJS layout map to a JS object.\n Inverse of js->layout.\"\n [layout]\n (when layout\n (clj->js\n (cond-> {\"type\" (name (:type layout))\n \"id\" (:id layout)}\n (:direction layout) (assoc \"direction\" (name (:direction layout)))\n (:ratio layout) (assoc \"ratio\" (:ratio layout))\n (:children layout) (assoc \"children\" (mapv layout->js (:children layout)))\n (:entity-id layout) (assoc \"entityId\" (:entity-id layout))))))\n\n(defn js->entities\n \"Convert a JS entities object to a CLJS map.\n Top-level keys stay as strings (entity IDs), nested keys are keywordized.\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (into {}\n (map (fn [[k v]]\n [k (if (map? v)\n (into {} (map (fn [[k2 v2]] [(keyword k2) v2]) v))\n v)]))\n obj))))\n\n(defn js->stages\n \"Convert a JS stages array to CLJS vector of stage maps.\"\n [js-arr]\n (when js-arr\n (mapv (fn [s]\n (let [obj (js->clj s)]\n {:id (get obj \"id\")\n :label (get obj \"label\")\n :layout (js->layout (get obj \"layout\"))}))\n js-arr)))\n\n(defn stages->js\n \"Convert CLJS stages vector to JS array.\"\n [stages]\n (clj->js\n (mapv (fn [s]\n {\"id\" (:id s)\n \"label\" (:label s)\n \"layout\" (layout->js (:layout s))})\n stages)))\n\n;; ============================================================\n;; Body \u2014 layout surface with stage stack\n;; ============================================================\n\n(defn- body-stage-component\n \"A single layout stage within the Body.\n\n Manages drag-drop split operations:\n - Sidebar drags: adds entity to layout via split\n - Tile rearranges: removes entity from source, splits at target\n\n Props:\n :layout - layout tree (CLJS map)\n :entities - entity data map\n :render-entity-tile - React component for tile content\n :active-entity - focused entity ID\n :on-layout-change - fn(new-layout) for layout mutations\n :on-active-entity-change - fn(entity-id) for focus changes\"\n [_]\n (let [props-ref (atom nil)\n handle-split (fn [tile-id entity-id split-direction source-type half]\n (let [{:keys [layout on-layout-change]} @props-ref\n before? (or (= half :left) (= half :top))\n base-layout (if (= source-type :tile)\n (or (layout/remove-entity-from-layout layout entity-id)\n layout)\n layout)\n target-after (layout/find-tile base-layout tile-id)\n new-tile-id (generate-id)\n split-id (generate-id)\n new-layout (when target-after\n (layout/split-tile\n base-layout tile-id split-direction\n entity-id new-tile-id split-id before?))]\n (when (and new-layout on-layout-change)\n (on-layout-change new-layout))))\n handle-close (fn [entity-id]\n (let [{:keys [layout on-layout-change on-entity-close]} @props-ref\n new-layout (layout/remove-entity-from-layout layout entity-id)]\n (when on-layout-change\n (on-layout-change new-layout))\n (when on-entity-close\n (on-entity-close entity-id))))\n handle-ratio (fn [split-id new-ratio]\n (let [{:keys [layout on-layout-change]} @props-ref\n new-layout (layout/update-split-ratio layout split-id new-ratio)]\n (when on-layout-change\n (on-layout-change new-layout))))]\n (fn [{:keys [layout entities render-entity-tile active-entity on-layout-change] :as props}]\n (reset! props-ref props)\n [:div.iris-body-stage\n [entity-tile-group/entity-tile-group\n layout handle-split handle-close handle-ratio active-entity entities render-entity-tile]])))\n\n(defn- stage-index\n \"Find the index of a stage by ID.\"\n [stages id]\n (first (keep-indexed (fn [i s] (when (= (:id s) id) i)) stages)))\n\n(defn- restart-animation!\n \"Force restart a CSS animation on an element.\n Uses offsetHeight read to force reflow before re-applying animation.\"\n [^js el anim-name]\n (when el\n (set! (.-animation (.-style el)) \"none\")\n (.-offsetHeight el)\n (set! (.-animation (.-style el)) (str anim-name \" 400ms cubic-bezier(0.22, 1, 0.36, 1) forwards\"))))\n\n(defn body-component\n \"Body \u2014 the main layout area.\n\n Renders all stages stacked on top of each other. The active stage\n is visible and interactive; others are hidden but stay mounted.\n\n Stage transitions use vertical slide animations:\n - Moving to a higher-indexed stage slides from bottom\n - Moving to a lower-indexed stage slides from top\n\n Props (received as CLJS map after wrapper conversion):\n :stages - vector of stage maps\n :active-stage - active stage ID\n :active-entity - focused entity ID\n :entities - entity data map\n :render-entity-tile - React component for tile content\n :on-stages-change - fn(stages) for layout mutations\n :on-active-stage-change - fn(stage-id) for stage switches\n :on-active-entity-change - fn(entity-id) for entity focus\"\n [_]\n (let [prev-stage-id (atom nil)\n slide-dir (atom \"right\")\n layer-refs (atom {})]\n (fn [{:keys [stages active-stage active-entity entities render-entity-tile\n on-stages-change on-active-stage-change on-active-entity-change on-entity-close]}]\n (let [prev-idx (stage-index stages @prev-stage-id)\n curr-idx (stage-index stages active-stage)\n changed? (and @prev-stage-id (not= @prev-stage-id active-stage))]\n ;; Determine slide direction based on stage order\n (when changed?\n (reset! slide-dir (if (and prev-idx curr-idx (> curr-idx prev-idx))\n \"down\" \"up\")))\n ;; Trigger slide animation after Reagent renders the DOM\n (when changed?\n (let [dir @slide-dir\n target-id active-stage]\n (r/after-render\n (fn []\n (when-let [el (get @layer-refs target-id)]\n (restart-animation! el (if (= dir \"down\")\n \"iris-slide-from-bottom\"\n \"iris-slide-from-top\")))))))\n (reset! prev-stage-id active-stage)\n [:div.iris-body\n ;; All stages stacked \u2014 each is always rendered\n [:div.iris-body-stack\n (for [stage stages]\n ^{:key (:id stage)}\n [:div {:class (str \"iris-body-layer\"\n (when (= (:id stage) active-stage) \" iris-body-layer-active\"))\n :ref (fn [el] (when el (swap! layer-refs assoc (:id stage) el)))}\n [body-stage-component\n {:layout (:layout stage)\n :entities entities\n :render-entity-tile render-entity-tile\n :active-entity active-entity\n :on-layout-change\n (fn [new-layout]\n (when on-stages-change\n (let [updated (mapv (fn [s]\n (if (= (:id s) (:id stage))\n (assoc s :layout new-layout)\n s))\n stages)]\n (on-stages-change updated))))\n :on-entity-close on-entity-close}]])]]))))\n\n;; ============================================================\n;; Grid \u2014 2D workspace grid with camera-based navigation\n;; ============================================================\n\n(defn- pos-key\n \"Convert [x y] to string key 'x,y'.\"\n [[x y]]\n (str x \",\" y))\n\n(defn- direction->delta\n \"Map a direction keyword to [dx dy].\"\n [dir]\n (case dir\n :left [-1 0]\n :right [1 0]\n :up [0 -1]\n :down [0 1]))\n\n(defn- grid-dimensions\n \"Compute grid bounds from workspace keys. Returns [cols rows].\"\n [workspaces]\n (if (empty? workspaces)\n [1 1]\n (let [positions (map (fn [k]\n (let [parts (.split k \",\")]\n [(js/parseInt (aget parts 0))\n (js/parseInt (aget parts 1))]))\n (keys workspaces))\n max-x (apply max (map first positions))\n max-y (apply max (map second positions))]\n [(inc max-x) (inc max-y)])))\n\n(defn- can-navigate?\n \"Check if navigation in a direction is allowed.\"\n [dir workspaces active-position]\n (let [[dx dy] (direction->delta dir)\n [x y] active-position\n new-x (+ x dx)\n new-y (+ y dy)\n new-key (pos-key [new-x new-y])\n active-key (pos-key active-position)\n current-empty? (nil? (:layout (get workspaces active-key)))\n target-exists? (contains? workspaces new-key)\n target-has-layout? (and target-exists?\n (:layout (get workspaces new-key)))]\n (and (>= new-x 0) (>= new-y 0)\n (not (and current-empty? (not target-has-layout?))))))\n\n(defn- handle-grid-nav\n \"Handle navigation in a direction. Creates empty workspace if needed.\"\n [dir props-ref]\n (let [{:keys [workspaces active-position\n on-workspaces-change on-active-position-change]} @props-ref]\n (when (can-navigate? dir workspaces active-position)\n (let [[dx dy] (direction->delta dir)\n [x y] active-position\n new-pos [(+ x dx) (+ y dy)]\n new-key (pos-key new-pos)\n target-exists? (contains? workspaces new-key)]\n (when (and (not target-exists?) on-workspaces-change)\n (on-workspaces-change (assoc workspaces new-key {:layout nil})))\n (when on-active-position-change\n (on-active-position-change new-pos))))))\n\n(defn- nav-edge-hiccup\n \"Return hiccup for a navigation edge button.\n During drag, hovering navigates to adjacent workspace (user keeps dragging to drop there).\"\n [css-class arrow visible? on-click direction props-ref nav-drag-edge]\n [:div {:class (str \"iris-nav-edge \" css-class\n (when-not visible? \" iris-nav-hidden\")\n (when (= @nav-drag-edge direction) \" iris-nav-drag-over\"))\n :on-click on-click\n :on-drag-over (fn [e] (.preventDefault e))\n :on-drag-enter (fn [e]\n (.preventDefault e)\n (reset! nav-drag-edge direction)\n ;; Navigate to adjacent workspace while dragging\n (handle-grid-nav direction props-ref))\n :on-drag-leave (fn [e]\n (when-not (.contains (.-currentTarget e) (.-relatedTarget e))\n (reset! nav-drag-edge nil)))\n :on-drop (fn [e]\n (.preventDefault e)\n (.stopPropagation e)\n (reset! nav-drag-edge nil))}\n [:span.iris-nav-arrow arrow]])\n\n(defn- update-workspaces-with-cleanup\n \"Update a workspace's layout and remove dragged entity from all other workspaces.\"\n [workspaces target-key new-layout]\n (let [dragged-entity @entity-tile/drag-source-entity]\n (if dragged-entity\n (reduce-kv\n (fn [acc ws-key ws-data]\n (if (= ws-key target-key)\n (assoc acc ws-key {:layout new-layout})\n (let [cleaned (layout/remove-entity-from-layout\n (:layout ws-data) dragged-entity)]\n (assoc acc ws-key {:layout cleaned}))))\n {} workspaces)\n (assoc workspaces target-key {:layout new-layout}))))\n\n(defn- handle-empty-workspace-drop\n \"Handle drop on an empty workspace \u2014 create a tile for the dropped entity.\"\n [e k workspaces on-workspaces-change]\n (.preventDefault e)\n (let [raw (.getData (.-dataTransfer e) \"text/plain\")]\n (try\n (let [data (js/JSON.parse raw)\n entity-id (.-entityId data)]\n (when entity-id\n (let [new-layout {:type :tile :id (generate-id) :entity-id entity-id}\n updated (update-workspaces-with-cleanup workspaces k new-layout)]\n (on-workspaces-change updated))))\n (catch :default _ nil))))\n\n(defn- grid-cell\n \"Render a single grid cell (workspace or empty placeholder).\"\n [k workspace active? zoomed? props]\n (let [{:keys [entities render-entity-tile active-entity\n on-workspaces-change on-active-position-change on-entity-close\n workspaces]} props\n [x y] (mapv js/parseInt (.split k \",\"))]\n [:div {:class (str \"iris-grid-cell\"\n (when active? \" iris-grid-cell-active\"))\n :data-position k\n :on-click (when (and zoomed? (not active?))\n (fn [_]\n (when on-active-position-change\n (on-active-position-change [x y]))))}\n (if (:layout workspace)\n [body-stage-component\n {:layout (:layout workspace)\n :entities entities\n :render-entity-tile render-entity-tile\n :active-entity (when active? active-entity)\n :on-layout-change\n (fn [new-layout]\n (when on-workspaces-change\n (on-workspaces-change\n (update-workspaces-with-cleanup workspaces k new-layout))))\n :on-entity-close on-entity-close}]\n [:div.iris-empty-workspace\n {:on-drag-over (fn [e] (.preventDefault e))\n :on-drop (fn [e]\n (when on-workspaces-change\n (handle-empty-workspace-drop e k workspaces on-workspaces-change)))}])]))\n\n(defn- grid-canvas\n \"Render the CSS grid canvas with all workspace cells.\"\n [cols rows workspaces active-position zoomed? props]\n (let [active-key (pos-key active-position)]\n (for [y (range rows)]\n (for [x (range cols)]\n (let [k (pos-key [x y])\n workspace (get workspaces k)]\n ^{:key k}\n [grid-cell k workspace (= k active-key) zoomed? props])))))\n\n(def ^:private grid-gap 32)\n\n(defn- camera-style\n \"Compute the CSS transform style for the grid canvas camera.\n Uses calc() to account for the gap between grid cells.\"\n [cols rows active-position zoomed?]\n (let [[ax ay] active-position\n scale (if zoomed? (/ 1 (max cols rows)) 1)\n ;; Each cell is (100% - (n-1)*gap) / n wide, plus gap between cells.\n ;; Offset for position p = p * (100% / n) but we also shift by p * gap / n\n ;; to center each cell. Simplest: calc(-ax * (100% + gap) / cols)\n tx (if zoomed?\n \"0px\"\n (str \"calc(\" ax \" * ((-100% - \" grid-gap \"px) / \" cols \"))\"))\n ty (if zoomed?\n \"0px\"\n (str \"calc(\" ay \" * ((-100% - \" grid-gap \"px) / \" rows \"))\"))]\n {:width (str \"calc(\" cols \" * 100% + \" (* (dec cols) grid-gap) \"px)\")\n :height (str \"calc(\" rows \" * 100% + \" (* (dec rows) grid-gap) \"px)\")\n :grid-template-columns (str \"repeat(\" cols \", 1fr)\")\n :grid-template-rows (str \"repeat(\" rows \", 1fr)\")\n :transform (str \"translate(\" tx \", \" ty \") scale(\" scale \")\")\n :transform-origin \"0 0\"}))\n\n(defn grid-component\n \"Grid \u2014 a 2D grid of workspaces with camera-based navigation.\n\n Workspaces are laid out in a real CSS grid. Navigation moves a camera\n (CSS translate) to show the active workspace. Holding Alt zooms out\n to show all workspaces at once.\"\n [_]\n (let [zoomed-out? (r/atom false)\n props-ref (atom nil)\n nav-drag-edge (r/atom nil)\n handle-nav (fn [dir] (handle-grid-nav dir props-ref))\n keydown-handler (fn [e]\n (when (and (= (.-key e) \"Alt\") (not (.-repeat e)))\n (reset! zoomed-out? true))\n (when (.-altKey e)\n (let [dir (case (.-key e)\n \"ArrowLeft\" :left\n \"ArrowRight\" :right\n \"ArrowUp\" :up\n \"ArrowDown\" :down\n nil)]\n (when dir\n (.preventDefault e)\n ;; Exit zoom-out first, then navigate (so slide is visible)\n (reset! zoomed-out? false)\n (handle-nav dir)))))\n keyup-handler (fn [e]\n (when (= (.-key e) \"Alt\")\n (reset! zoomed-out? false)))]\n (.addEventListener js/document \"keydown\" keydown-handler)\n (.addEventListener js/document \"keyup\" keyup-handler)\n ;; Watch touch-drag nav-edge-target for highlight + navigation\n (add-watch touch-drag/nav-edge-target ::grid-nav-highlight\n (fn [_ _ old-dir new-dir]\n (reset! nav-drag-edge new-dir)\n ;; Navigate when touch enters a nav edge\n (when (and new-dir (not= old-dir new-dir))\n (handle-grid-nav new-dir props-ref))))\n (fn [{:keys [workspaces active-position] :as props}]\n (reset! props-ref props)\n (let [[cols rows] (grid-dimensions workspaces)\n zoomed? @zoomed-out?\n dragging? (or @entity-tile/drag-source-tile @touch-drag/touch-state)\n vis? (fn [dir] (or dragging? (can-navigate? dir workspaces active-position)))]\n [:div {:class (str \"iris-grid-viewport\"\n (when zoomed? \" iris-grid-zoomed\"))}\n (nav-edge-hiccup \"iris-nav-left\" \"\\u2039\" (vis? :left) #(handle-nav :left) :left props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-right\" \"\\u203A\" (vis? :right) #(handle-nav :right) :right props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-top\" \"\\u2039\" (vis? :up) #(handle-nav :up) :up props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-bottom\" \"\\u203A\" (vis? :down) #(handle-nav :down) :down props-ref nav-drag-edge)\n [:div.iris-grid-center\n [:div.iris-grid-canvas\n {:style (camera-style cols rows active-position zoomed?)}\n (grid-canvas cols rows workspaces active-position zoomed? props)]]]))))\n\n;; ============================================================\n;; JS <-> CLJS: Grid conversions\n;; ============================================================\n\n(defn js->workspaces\n \"Convert a JS workspaces object {\\\"x,y\\\": {layout: ...}} to CLJS map.\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (into {}\n (map (fn [[k v]]\n [k {:layout (js->layout (get v \"layout\"))}]))\n obj))))\n\n(defn workspaces->js\n \"Convert CLJS workspaces map to JS object.\"\n [workspaces]\n (clj->js\n (into {}\n (map (fn [[k v]]\n [k {\"layout\" (layout->js (:layout v))}]))\n workspaces)))\n\n(defn- grid-wrapper\n \"Wrapper that converts JS props to CLJS for grid-component.\"\n [{:keys [workspaces activePosition activeEntity entities renderEntityTile\n onWorkspacesChange onActivePositionChange onActiveEntityChange onEntityClose]}]\n [grid-component\n {:workspaces (js->workspaces workspaces)\n :active-position (js->clj activePosition)\n :active-entity activeEntity\n :entities (js->entities entities)\n :render-entity-tile renderEntityTile\n :on-workspaces-change (when onWorkspacesChange\n (fn [new-workspaces]\n (onWorkspacesChange (workspaces->js new-workspaces))))\n :on-active-position-change (when onActivePositionChange\n (fn [new-pos]\n (onActivePositionChange (clj->js new-pos))))\n :on-active-entity-change onActiveEntityChange\n :on-entity-close onEntityClose}])\n\n;; ============================================================\n;; Sidebar \u2014 stage cards with entity cards\n;; ============================================================\n\n(defn- remove-entity-from-stages\n \"Remove an entity from a specific stage. If the stage becomes empty, remove it.\n Returns [updated-stages removed-stage-empty?].\"\n [stages source-stage-id entity-id]\n (let [source-stage (first (filter #(= (:id %) source-stage-id) stages))\n new-layout (when source-stage\n (layout/remove-entity-from-layout (:layout source-stage) entity-id))\n empty? (nil? new-layout)]\n [(if empty?\n (vec (remove #(= (:id %) source-stage-id) stages))\n (mapv (fn [s]\n (if (= (:id s) source-stage-id)\n (assoc s :layout new-layout)\n s))\n stages))\n empty?]))\n\n(defn sidebar-component\n \"Sidebar \u2014 renders a list of stage cards with drag-drop support.\n\n Features:\n - Click a card to switch active stage\n - Click an entity card to focus it\n - Close button removes entity from stage (empty stage is removed)\n - Drag entity cards between groups to move them\n - Drag entity cards to empty sidebar area to create a new group\n\n Props (received as CLJS map after wrapper conversion):\n :stages - vector of stage maps\n :active-stage - active stage ID\n :active-entity - focused entity ID\n :entities - entity data map\n :render-entity-card - React component for entity card content\n :on-stages-change - fn(stages) for layout mutations\n :on-active-stage-change - fn(stage-id) for stage switches\n :on-active-entity-change - fn(entity-id) for entity focus\n :on-entity-close - (optional) fn(stage-id, entity-id) side-effect hook called on close\"\n [_]\n (let [drag-over (r/atom false)]\n (fn [{:keys [stages active-stage active-entity entities render-entity-card\n on-stages-change on-active-stage-change on-active-entity-change\n on-entity-close]}]\n [:div.iris-sidebar\n {:class (when @drag-over \"iris-sidebar-drag-over\")\n :on-drag-over (fn [e] (.preventDefault e) (reset! drag-over true))\n :on-drag-enter (fn [e] (.preventDefault e))\n :on-drag-leave (fn [e]\n (when (not (.contains (.-currentTarget e) (.-relatedTarget e)))\n (reset! drag-over false)))\n :on-drop\n (fn [e]\n (.preventDefault e)\n (reset! drag-over false)\n ;; Only handle if not caught by a group (stopPropagation)\n (let [raw (.getData (.-dataTransfer e) \"text/plain\")]\n (try\n (let [data (js/JSON.parse raw)]\n (when (and (= (.-source data) \"sidebar\")\n (.-entityId data)\n (.-stageId data)\n on-stages-change)\n (let [entity-id (.-entityId data)\n source-stage-id (.-stageId data)\n [updated _] (remove-entity-from-stages stages source-stage-id entity-id)\n new-stage-id (generate-id)\n new-stage {:id new-stage-id\n :label (or (:name (get entities entity-id)) \"New Stage\")\n :layout {:type :tile\n :id (generate-id)\n :entity-id entity-id}}]\n (on-stages-change (conj updated new-stage))\n (when on-active-stage-change\n (on-active-stage-change new-stage-id)))))\n (catch :default _ nil))))}\n (for [stage stages]\n ^{:key (:id stage)}\n [entity-card-group/entity-card-group-component\n {:stage stage\n :active? (= (:id stage) active-stage)\n :entities entities\n :active-entity active-entity\n :render-entity-card render-entity-card\n :on-click #(when on-active-stage-change\n (on-active-stage-change (:id stage)))\n :on-entity-click #(when on-active-entity-change\n (on-active-entity-change %))\n :on-entity-close\n (fn [entity-id]\n (when on-stages-change\n (let [[updated empty?] (remove-entity-from-stages stages (:id stage) entity-id)]\n (on-stages-change updated)\n (when (and empty?\n (= active-stage (:id stage))\n on-active-stage-change\n (seq updated))\n (on-active-stage-change (:id (first updated))))))\n (when on-entity-close\n (on-entity-close (:id stage) entity-id)))\n :on-entity-drop\n (fn [entity-id source-stage-id]\n ;; Move entity from source stage to this stage\n (when on-stages-change\n (let [[updated source-empty?] (remove-entity-from-stages stages source-stage-id entity-id)\n ;; Add entity to target stage's layout\n updated (mapv (fn [s]\n (if (= (:id s) (:id stage))\n (assoc s :layout\n (layout/append-entity\n (:layout s) entity-id\n (generate-id) (generate-id)))\n s))\n updated)]\n (on-stages-change updated)\n ;; If source was active and got removed, switch to target\n (when (and source-empty?\n (= active-stage source-stage-id)\n on-active-stage-change)\n (on-active-stage-change (:id stage))))))}])])))\n\n;; ============================================================\n;; React-facing wrappers (JS consumers)\n;; ============================================================\n;; reactify-component auto-converts JS props to CLJS map with keyword keys.\n;; Nested objects (layout, entities, stages) remain as JS and need manual conversion.\n\n(defn- body-wrapper\n \"Wrapper that converts JS props to CLJS for body-component.\"\n [{:keys [stages activeStage activeEntity entities renderEntityTile\n onStagesChange onActiveStageChange onActiveEntityChange onEntityClose]}]\n [body-component\n {:stages (js->stages stages)\n :active-stage activeStage\n :active-entity activeEntity\n :entities (js->entities entities)\n :render-entity-tile renderEntityTile\n :on-stages-change (when onStagesChange\n (fn [new-stages]\n (onStagesChange (stages->js new-stages))))\n :on-active-stage-change onActiveStageChange\n :on-active-entity-change onActiveEntityChange\n :on-entity-close onEntityClose}])\n\n(defn- sidebar-wrapper\n \"Wrapper that converts JS props to CLJS for sidebar-component.\"\n [{:keys [stages activeStage activeEntity entities renderEntityCard\n onStagesChange onActiveStageChange onActiveEntityChange onEntityClose]}]\n [sidebar-component\n {:stages (js->stages stages)\n :active-stage activeStage\n :active-entity activeEntity\n :entities (js->entities entities)\n :render-entity-card renderEntityCard\n :on-stages-change (when onStagesChange\n (fn [new-stages]\n (onStagesChange (stages->js new-stages))))\n :on-active-stage-change onActiveStageChange\n :on-active-entity-change onActiveEntityChange\n :on-entity-close onEntityClose}])\n\n;; ============================================================\n;; Exported React components\n;; ============================================================\n\n(def Sidebar\n \"React component \u2014 stage list with draggable entity cards.\n See namespace docstring for full props specification.\"\n (r/reactify-component sidebar-wrapper))\n\n(def Body\n \"React component \u2014 layout surface with resizable, rearrangeable entity tiles.\n See namespace docstring for full props specification.\"\n (r/reactify-component body-wrapper))\n\n(def Grid\n \"React component \u2014 2D workspace grid with Alt+Arrow navigation.\n Workspaces are addressed by [x,y] coordinates in an infinite grid.\"\n (r/reactify-component grid-wrapper))\n"]}
1
+ {"version":3,"sources":["iris_layout/core.cljs"],"mappings":";;;;;;;;AAgBA,+BAAA,/BAAOA;AAAP,AACE,QAAA,oDAAa,AAACC;;AAEhB;;;;;;iCAAA,jCAAMC,0EAKHC;AALH,AAME,oBAAMA;AAAN,AACE,IAAMC,MAAI,AAACC,mDAAQF;AAAnB,AACE,IAAAG,UAAA,2CAAA,8JAAA,zGAAe,AAACC,gDAAQ,gDAAA,hDAACC,4CAAIJ,+DAChB,gDAAA,hDAACI,4CAAIJ;IADlBE,cAAA,oTAAAA,lSAEE,gDAAA,hDAACE,4CAAIJ,kBAAiB,8CAAAE,QAAA,tDAACG,qHAAiB,AAACF,gDAAQ,gDAAA,hDAACC,4CAAIJ;IAFxDE,cAAA,uPAAAA,rOAGE,gDAAA,hDAACE,4CAAIJ,cAAiB,8CAAAE,YAAA,1DAACG,iHAAa,gDAAA,hDAACD,4CAAIJ;IAH3CE,cAAA,gVAAAA,9TAIE,gDAAA,hDAACE,4CAAIJ,iBAAiB,8CAAAE,YAAA,1DAACG,uHAAgB,AAACC,6CAAKR,+BAAW,gDAAA,hDAACM,4CAAIJ;AAJ/D,AAAA,oBAKE,iBAAAO,mBAAI,gDAAA,hDAACH,4CAAIJ;AAAT,AAAA,oBAAAO;AAAAA;;AACI,uDAAA,hDAACH,4CAAIJ;;;AAAkB,qDAAAE,YAAA,1DAACG,yHAAiB,iBAAAE,mBAAI,gDAAA,hDAACH,4CAAIJ;AAAT,AAAA,oBAAAO;AAAAA;;AACK,uDAAA,hDAACH,4CAAIJ;;;;AAPzDE;;;AAFJ;;;AAWF;;;;iCAAA,jCAAMM,0EAGHC;AAHH,AAIE,oBAAMA;AAAN,AACE,OAACC,qBACC,iBAAAC,UAAA,2CAAA,kHAAA,3GAAgB,AAACC,eAAK,AAAA,mFAAOH,cACf,AAAA,gFAAKA;IADnBE,cAAA,gTAAAA,9RAEE,AAAA,6FAAYF,SAAS,8CAAAE,QAAA,tDAACN,kEAAkB,AAACO,eAAK,AAAA,6FAAYH;IAF5DE,cAAA,gRAAAA,9PAGE,AAAA,qFAAQF,SAAa,8CAAAE,YAAA,1DAACN,kEAAc,AAAA,qFAAQI;IAH9CE,cAAA,4WAAAA,1VAIE,AAAA,2FAAWF,SAAU,8CAAAE,YAAA,1DAACN,qEAAiB,AAACC,6CAAKE,+BAAW,AAAA,2FAAWC;AAJrE,AAAA,oBAKE,AAAA,6FAAYA;AAAS,qDAAAE,YAAA,1DAACN,qEAAiB,AAAA,6FAAYI;;AALrDE;;;;AAFJ;;;AASF;;;;mCAAA,nCAAME,8EAGHd;AAHH,AAIE,oBAAMA;AAAN,AACE,IAAMC,MAAI,AAACC,mDAAQF;AAAnB,AACE,oDAAA,7CAACe,gFACK,AAACC,4CAAI,WAAAC;AAAA,AAAA,IAAAC,YAAAD;QAAA,AAAAE,4CAAAD,UAAA,IAAA,9DAAME;QAAN,AAAAD,4CAAAD,UAAA,IAAA,9DAAQG;AAAR,AAAA,0FACGD,EAAE,EAAI,AAACE,qBAAKD,IACR,6CAAA,7CAACN,gFAAQ,AAACC,4CAAI,WAAAO;AAAA,AAAA,IAAAC,YAAAD;SAAA,AAAAJ,4CAAAK,UAAA,IAAA,/DAAMC;SAAN,AAAAN,4CAAAK,UAAA,IAAA,/DAASE;AAAT,AAAA,0FAAe,AAACtB,gDAAQqB,IAAIC;GAAKL,IAC/CA;IACZpB;;AAPV;;;AAcF;;;;;;;;;;;;;;;wCAAA,xCAAO0B,wFAcJC;AAdH,AAeE,IAAMC,YAAU,6CAAA,7CAACC;IACXC,eAAa,WAAKC,QAAQC,UAAUC,gBAAgBC,YAAYC;AAAnD,AACE,IAAAC,YAAA,AAAAC,gBAAyCT;IAAzCQ,gBAAA,AAAAE,4BAAAF;aAAA,AAAAhC,4CAAAgC,cAAA,nEAAc3B;uBAAd,AAAAL,4CAAAgC,cAAA,7EAAqBG;IACfC,gBAAQ,EAAI,kDAAA,lDAACC,6CAAEN,gEAAY,kDAAA,lDAACM,6CAAEN;IAC9BO,cAAY,EAAI,yDAAA,zDAACD,6CAAEP,kEACL,iBAAA3B,mBAAI,AAACoC,6CAAiClC,OAAOuB;AAA7C,AAAA,oBAAAzB;AAAAA;;AACIE;;KACJA;IACdmC,eAAa,AAACC,6BAAiBH,YAAYX;IAC3Ce,cAAY,AAAClD;IACbmD,WAAS,AAACnD;IACVoD,aAAW,gCAAA,4MAAA,1NAAMJ,cACJ,AAACK,mEACCP,YAAYX,QAAQE,gBACpBD,UAAUc,YAAYC,2DAASP;AAZpD,AAaE,oBAAM,iBAAAU,oBAAKF;AAAL,AAAA,oBAAAE;AAAgBX;;AAAhBW;;;AAAN,AACE,QAACX,iDAAAA,6DAAAA,dAAiBS,yCAAAA;;AADpB;;;IAEjBG,eAAa,WAAKnB;AAAL,AACE,IAAAoB,YAAA,AAAAf,gBAAyDT;IAAzDwB,gBAAA,AAAAd,4BAAAc;aAAA,AAAAhD,4CAAAgD,cAAA,nEAAc3C;uBAAd,AAAAL,4CAAAgD,cAAA,7EAAqBb;sBAArB,AAAAnC,4CAAAgD,cAAA,5EAAsCC;IAChCL,aAAW,AAACL,6CAAiClC,OAAOuB;AAD1D,AAEE,oBAAMO;AAAN,AACE,CAACA,iDAAAA,6DAAAA,dAAiBS,yCAAAA;;AADpB;;AAEA,oBAAMK;AAAN,AACE,QAACA,gDAAAA,2DAAAA,bAAgBrB,uCAAAA;;AADnB;;;IAEjBsB,eAAa,WAAKP,SAASQ;AAAd,AACE,IAAAC,YAAA,AAAAnB,gBAAyCT;IAAzC4B,gBAAA,AAAAlB,4BAAAkB;aAAA,AAAApD,4CAAAoD,cAAA,nEAAc/C;uBAAd,AAAAL,4CAAAoD,cAAA,7EAAqBjB;IACfS,aAAW,AAACS,sCAA0BhD,OAAOsC,SAASQ;AAD5D,AAEE,oBAAMhB;AAAN,AACE,QAACA,iDAAAA,6DAAAA,dAAiBS,yCAAAA;;AADpB;;;AA3BvB,AA6BE,kBAAAU;AAAA,AAAA,IAAAC,YAAAD;IAAAC,gBAAA,AAAArB,4BAAAqB;YAAAA,RAA4GK;aAA5G,AAAA5D,4CAAAuD,cAAA,nEAAalD;eAAb,AAAAL,4CAAAuD,cAAA,rEAAoBC;yBAApB,AAAAxD,4CAAAuD,cAAA,/EAA6BE;oBAA7B,AAAAzD,4CAAAuD,cAAA,1EAAgDG;uBAAhD,AAAA1D,4CAAAuD,cAAA,7EAA8DpB;8BAA9D,AAAAnC,4CAAAuD,cAAA,pFAA+EI;AAA/E,AACE,AAACE,sBAAOrC,UAAUoC;;AAClB,YAAA,AAAA3B,RAAM6B,wBAAOC;IACPC,UAAQ,yBAAA,2CAAA,lDAAMF,OAAM,AAACrB,6BAAiBpC,OAAOyD;IAC7CG,YAAU,2BAAA,4JAAA,rKAAMD,SAAQ,AAAChE,4CAAIwD,SAAS,AAAA,6FAAYQ;AAFxD,AAAA,0FAAA,kFAAA,mFAIIE,2DACA7D,OAAOqB,aAAaqB,aAAaG,aAAaQ,cAAcF,SAASC,mBAAmBE,gCACzF,2BAAA,AAAA,mFAAA,mGAAA,2CAAA,+VAAA,mFAAA,kHAAA,2CAAA,zzBAAMK,iSAEK,mHAAA,AAAA,2CAAA,4HAAA,xQAAM,AAAA,qFAAQC,2EAAgC,AAAA,qFAAQA,4VAE3C,WAAK1C;AAAL,AAAQ,gFAAA,zEAACsC,sBAAOE;WAJtC,mFAAA,+GAMK,iBAAA5D,mBAAI,AAAA,mFAAO8D;AAAX,AAAA,oBAAA9D;AAAAA;;AAAsB,OAAA,6FAAY6D;;aANvC,mFAAA,qHAAA,2CAAA,6DAQgB,WAAKG;AAAL,AACE,AAAkBA;;AAClB,gFAAA,zEAACN,sBAAOE;WAV1B,yBAAA,mFAAA,sGAaI,kBAAM,iBAAAjB,oBAAKmB;AAAL,AAAA,oBAAAnB;AAAeW;;AAAfX;;mMAbV,7LAaI,AAAA,mFAAA,oFAAA,rCACMW,mBAAmBQ;;;AAOtC;;;2BAAA,mCAAAG,9DAAOE;AAAP,AAAA,IAAAD,YAAAD;QAAA,AAAAtD,4CAAAuD,UAAA,IAAA,9DAEIE;QAFJ,AAAAzD,4CAAAuD,UAAA,IAAA,9DAEMG;AAFN,AAGE,uDAAA,HAAKD,mDAAMC;;AAEb;;;uCAAA,vCAAOC,sFAEJC;AAFH,AAGE,IAAAC,UAAMD;IAANC,cAAA,EAAA,CAAAA,mBAAAC,oBAAA,AAAAD,YAAA;AAAA,AAAA,QAAAA;KAAA;AAAA,0FAAA,KAAA;;;KAAA;AAAA,0FAAA,IAAA;;;KAAA;AAAA,0FAAA,IAAA;;;KAAA;AAAA,0FAAA,IAAA;;;;AAAA,MAAA,KAAAE,MAAA,CAAA,mEAAAF;;;;AAMF;;;mCAAA,nCAAOG,8EAEJC;AAFH,AAGE,GAAI,AAACC,uBAAOD;AAAZ,0FAAA,IAAA;;AAEE,IAAME,YAAU,AAACtE,4CAAI,WAAKI;AAAL,AACE,IAAMmE,QAAM,QAAA,RAAQnE;AAApB,AAAA,0FACG,AAACoE,SAAY,OAAA,NAAMD,aACnB,AAACC,SAAY,OAAA,NAAMD;GACxB,AAACE,eAAKL;IACrBM,QAAM,AAACC,8CAAMC,cAAI,AAAC5E,4CAAI6E,gBAAMP;IAC5BQ,QAAM,AAACH,8CAAMC,cAAI,AAAC5E,4CAAI+E,iBAAOT;AANnC,AAAA,0FAOG,SAAA,RAAKI,aAAO,SAAA,RAAKI;;;AAExB;;;uCAAA,vCAAOE,sFAEJjB,IAAIK,WAAWa;AAFlB,AAGE,IAAAC,YAAc,AAACpB,qCAAiBC;SAAhC,AAAA5D,4CAAA+E,UAAA,IAAA,/DAAOE;SAAP,AAAAjF,4CAAA+E,UAAA,IAAA,/DAAUG;IAAVF,YACYF;QADZ,AAAA9E,4CAAAgF,UAAA,IAAA,9DACOvB;QADP,AAAAzD,4CAAAgF,UAAA,IAAA,9DACStB;IACHyB,QAAM,CAAG1B,IAAEwB;IACXG,QAAM,CAAG1B,IAAEwB;IACXG,UAAQ,yBAAA,zBAAC7B,4GAAS2B,MAAMC;IACxBE,aAAW,AAAC9B,yBAAQsB;IACpBS,uBAAe,gKAAA,/JAAM,AAAA,wFAAS,AAACrG,4CAAI+E,WAAWqB;IAC9CE,uBAAe,AAACC,0BAAUxB,WAAWoB;IACrCK,2BAAmB,iBAAA1D,oBAAKwD;AAAL,AAAA,GAAAxD;AACK,OAAA,wFAAS,AAAC9C,4CAAI+E,WAAWoB;;AAD9BrD;;;AARzB,AAUE,6BAAA,pBAAK,UAAA,TAAImD,qBAAS,UAAA,TAAIC,mBACjB,GAAK,EAAKG,0BAAe,AAACI,cAAID;;AAEvC;;;mCAAA,nCAAOE,8EAEJhC,IAAIlD;AAFP,AAGE,IAAAmF,YAAA,AAAA1E,gBACgET;IADhEmF,gBAAA,AAAAzE,4BAAAyE;iBAAA,AAAA3G,4CAAA2G,cAAA,vEAAc5B;sBAAd,AAAA/E,4CAAA2G,cAAA,5EAAyBf;2BAAzB,AAAA5F,4CAAA2G,cAAA,jFACcC;gCADd,AAAA5G,4CAAA2G,cAAA,tFACmCE;AADnC,AAEE,GAAM,AAAClB,qCAAcjB,IAAIK,WAAWa;AAApC,AACE,IAAAkB,YAAc,AAACrC,qCAAiBC;SAAhC,AAAA5D,4CAAAgG,UAAA,IAAA,/DAAOf;SAAP,AAAAjF,4CAAAgG,UAAA,IAAA,/DAAUd;IAAVe,YACYnB;QADZ,AAAA9E,4CAAAiG,UAAA,IAAA,9DACOxC;QADP,AAAAzD,4CAAAiG,UAAA,IAAA,9DACSvC;cADT,VAEMwC,6FAAS,CAAGzC,IAAEwB,IAAI,CAAGvB,IAAEwB;IACvBG,UAAQ,AAAC7B,yBAAQ0C;IACjBV,uBAAe,AAACC,0BAAUxB,WAAWoB;AAJ3C,AAKE,oBAAM,iBAAArD,oBAAK,GAAKwD;AAAV,AAAA,GAAAxD;AAA0B8D;;AAA1B9D;;;AAAN,AACE,IAAAmE,eAAsB,iEAAA,2CAAA,0DAAA,tKAAChH,8CAAM8E,WAAWoB;AAAxC,AAAA,yGAAAc,+CAAAA,vJAACL,qDAAAA,mEAAAA;;AADH;;AAEA,oBAAMC;AAAN,AACE,QAACA,0DAAAA,mEAAAA,XAA0BG,+CAAAA;;AAD7B;;;AARJ;;;AAWJ;;;;mCAAA,nCAAOE,8EAGJC,UAAUC,eAASC,SAASC,UAAU9F,UAAU+F;AAHnD,AAAA,0FAAA,mDAAA,2CAAA,4TAAA,sEAAA,1UAIgB,CAAA,6DAAsBJ,WACjB,kCAAA,KAAA,AAAA,rBAAUC,yCACV,0FAAA,AAAA,sBAAA,9GAAM,6CAAA,AAAAnF,7CAACI,6DAAGkF,eAAcD,+GAC1BD,6EACI,WAAKlD;AAAL,AAAQ,OAAiBA;GARhD,wEASwB,WAAKA;AAAL,AACE,AAAiBA;;AACjB,AAACN,sBAAO0D,cAAcD;;AACtB,OAACZ,iCAAgBY,UAAU9F;GAZrD,uEAawB,WAAK2C;AAAL,AACE,oBAAU,AAAW,AAAiBA,yBAAG,AAAiBA;AAA1D;;AAAA,AACE,2CAAA,pCAACN,sBAAO0D;;GAfpC,2DAgBkB,WAAKpD;AAAL,AACE,AAAiBA;;AACjB,AAAkBA;;AAClB,2CAAA,pCAACN,sBAAO0D;WAnB5B,mFAAA;;AAsBA;;;kDAAA,lDAAOC,4GAEJzC,WAAW0C,WAAW7E;AAFzB,AAGE,qBAAA,AAAAX,jBAAMyF,iCAAgBC;AAAtB,AACE,oBAAID;AACF,OAACE,oBACC,WAAKC,IAAIC,OAAOC;AAAhB,AACE,GAAI,AAAC1F,6CAAEyF,OAAOL;AACZ,gEAAA,2CAAA,pGAACxH,8CAAM4H,IAAIC,4GAAgBlF;;AAC3B,IAAMoF,UAAQ,AAACzF,6CACC,AAAA,wFAASwF,SAASL;AADlC,AAEE,gEAAA,2CAAA,pGAACzH,8CAAM4H,IAAIC,4GAAgBE;;GANnC,mCAOKjD;;AACL,2EAAA,2CAAA,/GAAC9E,8CAAM8E,WAAW0C,gHAAoB7E;;;AAE5C;;;+CAAA,/CAAOqF,sGAEJ9D,EAAEpD,EAAEgE,WAAW6B;AAFlB,AAGE,AAAiBzC;;AACjB,IAAM+D,MAAI,uBAAA,vBAAU,AAAgB/D;AAApC,AACE,IAAA,AACE,IAAMiE,OAAK,AAACC,WAAcH;IACpBtG,YAAU,AAAYwG;AAD5B,AAEE,oBAAMxG;AAAN,AACE,iBAAA,2CAAA,qDAAA,oDAAA,iFAAA,lPAAMgB,mNAA4B,AAACpD,8FAAwBoC;IACrD0G,UAAQ,AAACd,gDAA+BzC,WAAWhE,EAAE6B;AAD3D,AAEE,QAACgE,qDAAAA,8DAAAA,XAAqB0B,0CAAAA;;AAH1B;;eAHJ,QAAAH,JAOkB5G;AAPlB,AAAA;;AASJ;;;6BAAA,7BAAOgH,kEAEJxH,EAAEyH,UAAUC,cAAQC,cAAQ9E;AAF/B,AAGE,IAAA+E,YAEmD/E;IAFnD+E,gBAAA,AAAAzG,4BAAAyG;eAAA,AAAA3I,4CAAA2I,cAAA,rEAAcnF;yBAAd,AAAAxD,4CAAA2I,cAAA,/EAAuBlF;oBAAvB,AAAAzD,4CAAA2I,cAAA,1EAA0CjF;2BAA1C,AAAA1D,4CAAA2I,cAAA,jFACc/B;gCADd,AAAA5G,4CAAA2I,cAAA,tFACmC9B;sBADnC,AAAA7G,4CAAA2I,cAAA,5EAC6D1F;8BAD7D,AAAAjD,4CAAA2I,cAAA,pFAEchF;iBAFd,AAAA3D,4CAAA2I,cAAA,vEAEsC5D;IAFtC6D,YAGY,AAAC1I,6CAAKiF,SAAY,QAAA,RAAQpE;QAHtC,AAAAD,4CAAA8H,UAAA,IAAA,9DAGOrE;QAHP,AAAAzD,4CAAA8H,UAAA,IAAA,9DAGSpE;AAHT,AAAA,0FAAA,mDAAA,2CAAA,oJAAA,yEAAA,rKAIgB,CAAA,iBACK,iCAAA,AAAA,yBAAA,xCAAMiE,+HACH1H,4EACC,kBAAM,iBAAA+B,oBAAK4F;AAAL,AAAA,oBAAA5F;AAAa,OAAC2D,cAAIgC;;AAAlB3F;;MAAN,AACE,WAAKvB;AAAL,AACE,oBAAMsF;AAAN,AACE,IAAAgC,UAAA,mFAA4BtE,EAAEC;AAA9B,AAAA,0HAAAqE,+CAAAA,jKAAChC,0DAAAA,mEAAAA;;AADH;;SAT7B,NAOyB,mEAIN,kBAAM,iBAAA/D,oBAAK4F;AAAL,AAAA,oBAAA5F;AAAa,OAAC2D,cAAIgC;;AAAlB3F;;MAAN,AACE,WAAKvB;AAAL,AACE,oBAAMsF;AAAN,AACE,IAAAiC,UAAA,mFAA4BvE,EAAEC;AAA9B,AAAA,0HAAAsE,+CAAAA,jKAACjC,0DAAAA,mEAAAA;;AADH;;GAFJ,cAIhB,sHAAA,yHAAA,2CAAA,6JAAA,sEAAA,mGAAA,6HAAA,mHAAA,9zBAAI,AAAA,wFAAS2B,+FACVlH,2IACS,AAAA,wFAASkH,wEACPhF,yFACUC,2FACL,iCAAA,cAAA,7BAAMgF,eAAQ/E,+GACJC,sGAEzB,WAAKf;AAAL,AACE,oBAAMgE;AAAN,AACE,IAAAmC,UACE,AAACvB,gDAA+BzC,WAAWhE,EAAE6B;AAD/C,AAAA,gHAAAmG,0CAAAA,lJAACnC,qDAAAA,8DAAAA;;AADH;;GATN,2GAAA,mFAAA,2FAAA,2CAAA,zPAYqB3D,6TAEH,WAAKkB;AAAL,AAAQ,OAAiBA;GAd3C,2DAea,WAAKA;AAAL,AACE,oBAAMyC;AAAN,AACE,OAACqB,6CAA4B9D,EAAEpD,EAAEgE,WAAW6B;;AAD9C;;;;AAGpB;;;+BAAA,/BAAOoC,sEAEJC,KAAKC,KAAKnE,WAAWa,gBAAgB8C,cAAQ9E;AAFhD,AAGE,IAAMwC,aAAW,AAAC9B,yBAAQsB;AAA1B,AACE,IAAAuD,qBAAA,oDAAAC;AAAA,AAAA,YAAAC,kBAAA,KAAA;AAAA,AAAA,IAAAD,cAAAA;;AAAA,AAAA,IAAAE,qBAAA,AAAAC,cAAAH;AAAA,AAAA,GAAAE;AAAA,AAAA,IAAAF,cAAAE;AAAA,AAAA,GAAA,AAAAE,6BAAAJ;AAAA,IAAAK,kBAirE+C,AAAAkF,sBAAAvF;IAjrE/CM,qBAAA,AAAAC,gBAAAF;IAAAG,UAAA,AAAAC,uBAAAH;AAAA,AAAA,GAAA,AAAA,iBAAAI,UAAA;;AAAA,AAAA,GAAA,CAAAA,UAAAJ;AAAA,QAAA,AAAAK,eAAAN,gBAAAK,nCAAMtF;AAAN,AAAA,AAAA,AAAAwF,uBAAAJ,QACE,iBAAAT,qBAAA;wEAAAqB;AAAA,AAAA,YAAAnB,kBAAA,KAAA;;AAAA,AAAA,IAAAmB,cAAAA;;AAAA,AAAA,IAAAlB,yBAAA,AAAAC,cAAAiB;AAAA,AAAA,GAAAlB;AAAA,AAAA,IAAAkB,cAAAlB;AAAA,AAAA,GAAA,AAAAE,6BAAAgB;AAAA,IAAAf,sBAgrE6C,AAAAkF,sBAAAnE;IAhrE7Cd,yBAAA,AAAAC,gBAAAF;IAAAgB,UAAA,AAAAZ,uBAAAH;AAAA,AAAA,GAAA,AAAA,iBAAAgB,UAAA;;AAAA,AAAA,GAAA,CAAAA,UAAAhB;AAAA,QAAA,AAAAK,eAAAN,oBAAAiB,vCAAMnG;AAAN,AAAA,AAAA,AAAAyF,uBAAAS,QACE,iBAAM1J,IAAE,yBAAA,zBAACuD,4GAASC,EAAEC;IACdgE,YAAU,AAACxI,4CAAI+E,WAAWhE;AADhC,AAAA,2BAAA,iNAAA,2CAAA,oDAESA,7NACNwH,2BAAUxH,EAAEyH,UAAU,AAACnG,6CAAEtB,EAAEqF,YAAYsC,cAAQ9E;;;AAJpD,cAAA,CAAA8G,UAAA;;;;AAAA;;;;;AAAA,OAAAT,qBAAA,AAAAC,gBAAAO,SAAA,AAAAE,uDAAA,AAAAP,qBAAAI;;AAAA,OAAAP,qBAAA,AAAAC,gBAAAO,SAAA;;;AAAA,QAAA,AAAAjF,gBAAAgF,pBAAMjG;AAAN,AAAA,OAAA8F,eACE,iBAAMtJ,IAAE,yBAAA,zBAACuD,4GAASC,EAAEC;IACdgE,YAAU,AAACxI,4CAAI+E,WAAWhE;AADhC,AAAA,2BAAA,iNAAA,2CAAA,oDAESA,7NACNwH,2BAAUxH,EAAEyH,UAAU,AAACnG,6CAAEtB,EAAEqF,YAAYsC,cAAQ9E;KAJpD,AAAA+G,uDAAA,AAAAL,eAAAE;;;AAAA;;;;;CAAA,KAAA;;;AAAA,AAAA,OAAArB,mBAAQ,AAACoB,8CAAMtB;;;AADjB,cAAA,CAAAa,UAAA;;;;AAAA;;;;;AAAA,OAAAG,qBAAA,AAAAC,gBAAAN,SAAA,AAAAO,0CAAA,AAAAC,qBAAAhB;;AAAA,OAAAa,qBAAA,AAAAC,gBAAAN,SAAA;;;AAAA,QAAA,AAAApE,gBAAA4D,pBAAM5E;AAAN,AAAA,OAAA6F,eACE,iBAAAlB,qBAAA;wEAAAyB;AAAA,AAAA,YAAAvB,kBAAA,KAAA;AAAA,AAAA,IAAAuB,cAAAA;;AAAA,AAAA,IAAAtB,yBAAA,AAAAC,cAAAqB;AAAA,AAAA,GAAAtB;AAAA,AAAA,IAAAsB,cAAAtB;AAAA,AAAA,GAAA,AAAAE,6BAAAoB;AAAA,IAAAnB,kBAgrE6C,AAAAkF,sBAAA/D;IAhrE7ClB,qBAAA,AAAAC,gBAAAF;IAAAoB,UAAA,AAAAhB,uBAAAH;AAAA,AAAA,GAAA,AAAA,iBAAAoB,UAAA;;AAAA,AAAA,GAAA,CAAAA,UAAApB;AAAA,QAAA,AAAAK,eAAAN,gBAAAqB,nCAAMvG;AAAN,AAAA,AAAA,AAAAyF,uBAAAa,QACE,iBAAM9J,IAAE,yBAAA,zBAACuD,4GAASC,EAAEC;IACdgE,YAAU,AAACxI,4CAAI+E,WAAWhE;AADhC,AAAA,2BAAA,iNAAA,2CAAA,oDAESA,7NACNwH,2BAAUxH,EAAEyH,UAAU,AAACnG,6CAAEtB,EAAEqF,YAAYsC,cAAQ9E;;;AAJpD,cAAA,CAAAkH,UAAA;;;;AAAA;;;;;AAAA,OAAAb,qBAAA,AAAAC,gBAAAW,SAAA,AAAAE,uDAAA,AAAAX,qBAAAQ;;AAAA,OAAAX,qBAAA,AAAAC,gBAAAW,SAAA;;;AAAA,QAAA,AAAArF,gBAAAoF,pBAAMrG;AAAN,AAAA,OAAA8F,eACE,iBAAMtJ,IAAE,yBAAA,zBAACuD,4GAASC,EAAEC;IACdgE,YAAU,AAACxI,4CAAI+E,WAAWhE;AADhC,AAAA,2BAAA,iNAAA,2CAAA,oDAESA,7NACNwH,2BAAUxH,EAAEyH,UAAU,AAACnG,6CAAEtB,EAAEqF,YAAYsC,cAAQ9E;KAJpD,AAAAmH,uDAAA,AAAAT,eAAAM;;;AAAA;;;;GAAA,KAAA;;;AAAA,AAAA,OAAAzB,mBAAQ,AAACoB,8CAAMtB;KADjB,AAAAkB,0CAAA,AAAAG,eAAAlB;;;AAAA;;;;GAAA,KAAA;;AAAA,AAAA,OAAAD,mBAAQ,AAACoB,8CAAMrB;;AAOnB,4BAAA,5BAAe8B;AAEf;;;;gCAAA,hCAAOC,wEAGJhC,KAAKC,KAAKtD,gBAAgB8C;AAH7B,AAIE,IAAAwC,YAActF;SAAd,AAAA9E,4CAAAoK,UAAA,IAAA,/DAAOC;SAAP,AAAArK,4CAAAoK,UAAA,IAAA,/DAAUE;IACJC,QAAM,kBAAI3C,eAAQ,CAAA,MAAK,iBAAA4C,kBAAKrC;IAALsC,kBAAUrC;AAAV,AAAA,SAAAoC,kBAAAC,mBAAAD,kBAAAC;MAAjB;IAINC,KAAG,iCAAA,fAAI9C,qBAEF,CAAA,wDAAA,uFAAA,2DAAA,tJAAayC,gEAAmBH,gFAAkB/B;IACvDwC,KAAG,iCAAA,fAAI/C,qBAEF,CAAA,wDAAA,uFAAA,2DAAA,tJAAa0C,gEAAmBJ,gFAAkB9B;AAV7D,AAAA,kDAAA,uOAAA,yOAAA,uKAAA,iKAAA,oKAAA,6EAAA,l9BAWW,CAAA,0DAAA,qGAAA,3GAAaD,+DAAkB,CAAG,QAAA,PAAKA,cAAM+B,qGAC7C,CAAA,0DAAA,qGAAA,3GAAa9B,+DAAkB,CAAG,QAAA,PAAKA,cAAM8B,mIAC9B,CAAA,4DAAA,NAAe/B,0GACf,CAAA,4DAAA,NAAeC,wFAC3B,CAAA,gBAAA,QAAA,8DAAA,zEAAkBsC,QAAQC,0DAAcJ;;AAGxD;;;;;;;kCAAA,lCAAMK,4EAMHnK;AANH,AAOE,IAAMoK,oBAAY,gDAAA,hDAACC;IACbpK,YAAU,6CAAA,7CAACC;IACX8F,gBAAc,gDAAA,hDAACqE;IACfC,4BAAoB,6CAAA,7CAACpK;IACrBqK,aAAW,WAAKpH;AAAL,AAAU,OAACgC,iCAAgBhC,IAAIlD;;IAC1CuK,kBAAgB,WAAK5H;AAAL,AACE,GAAM,EAAK,mDAAA,nDAAC9B,6CAAE,AAAO8B,kBAAU,AAACsC,cAAI,AAAUtC;AAA9C,AACE,wCAAA,xCAACN,sBAAO8H;;AADV;;AAEA,oBAAM,AAAUxH;AAAhB,AACE,IAAMO,MAAI,iBAAAsH,UAAM,AAAO7H;AAAb,AAAA,QAAA6H;KAAA;AAAA;;;KAAA;AAAA;;;KAAA;AAAA;;;KAAA;AAAA;;;;AAAA;;;;AAAV,AAME,oBAAMtH;AAAN,AACE,AAAiBP;;AAEjB,wCAAA,xCAACN,sBAAO8H;;AACR,OAACG,WAAWpH;;AAJd;;;AAPJ;;;IAYlBuH,gBAAc,WAAK9H;AAAL,AACE,GAAM,mDAAA,nDAAC9B,6CAAE,AAAO8B;AAAhB,AACE,+CAAA,xCAACN,sBAAO8H;;AADV;;;AArBtB,AAuBE,0BAAA,1BAAmBO,oCAAsBH;;AACzC,0BAAA,1BAAmBG,kCAAoBD;;AAEvC,sEAAA,tEAACE,oBAAUC,mKACT,WAAK7K,MAAEA,MAAE8K,QAAQC;AAAjB,AACE,AAACzI,sBAAO0D,cAAc+E;;AAEtB,oBAAM,iBAAAxJ,oBAAKwJ;AAAL,AAAA,oBAAAxJ;AAAa,OAACyJ,gDAAKF,QAAQC;;AAA3BxJ;;;AAAN,AACE,gDAAA,hDAACe,sBAAOgI;;AACR,OAACnF,iCAAgB4F,QAAQ9K;;AAF3B;;;;AAIJ,kEAAA,lEAAC2K,oBAAUK,uJACT,WAAKjL,MAAEA,MAAEA,MAAEkL;AAAX,AACE,oBAAM,iBAAA3J,oBAAK2J;AAAL,AAAA,oBAAA3J;AAAA,IAAAA,wBACK,AAAC2D,cAAI,AAAA,wGAAiBgG;AAD3B,AAAA,GAAA3J;AAAA,OAAAb,gBAEM4J;;AAFN/I;;;AAAAA;;;AAAN,AAGE,IAAA4J,iBAAiCD;IAAjCC,qBAAA,AAAAxK,4BAAAwK;4BAAA,AAAA1M,4CAAA0M,mBAAA,vFAAcE;IAAdD,iBAAA,AAAA1K,gBACiET;IADjEmL,qBAAA,AAAAzK,4BAAAyK;sBAAA,AAAA3M,4CAAA2M,mBAAA,jFACc5H;2BADd,AAAA/E,4CAAA2M,mBAAA,tFACyB/G;gCADzB,AAAA5F,4CAAA2M,mBAAA,3FACyC/F;IACnCR,kBAAW,AAAC9B,yBAAQsB;AAF1B,AAGE,oBAAM,iBAAA9C,oBAAK8J;AAAL,AAAA,oBAAA9J;AAAsB8D;;AAAtB9D;;;AAAN,AACE,oBAAA,2CAAA,qDAAA,oDAAA,iFAAA,rPAAM+J,sNAA0B,AAACrN,8FAAwBoN;IACnDE,uBAAgB,AAAA,wFAAS,AAAC9M,4CAAI+E,gBAAWqB;IACzCxD,kBAAW,wCAAA,2CAAA,qDAAA,uDAAA,iFAAA,+DAAA,iEAAA,uDAAA,IAAA,6DAAA,tfAAIkK,+NAEgB,AAACtN,0WAEPsN,qBAAgBD,8BAC5BA;IACbvE,eAAQ,AAACV,oBACC,WAAKC,IAAIC,OAAOC;AAAhB,AACE,GAAI,AAAC1F,6CAAEyF,OAAO1B;AACZ,gEAAA,2CAAA,pGAACnG,8CAAM4H,IAAIC,4GAAgBlF;;AAC3B,IAAMoF,UAAQ,AAACzF,6CACC,AAAA,wFAASwF,SAAS6E;AADlC,AAEE,gEAAA,2CAAA,pGAAC3M,8CAAM4H,IAAIC,4GAAgBE;;GANnC,mCAOKjD;AAfnB,AAgBE,CAAC6B,0DAAAA,wEAAAA,hBAAqB0B,oDAAAA;;AAjB1B;;AAkBF,oEAAA,pEAACzE,sBAAO2I;;AAxBV;;AAyBA,uDAAA,hDAAC3I,sBAAOgI;;;AACZ,kBAAAkB;AAAA,AAAA,IAAAC,YAAAD;IAAAC,gBAAA,AAAA9K,4BAAA8K;YAAAA,RAA6CpJ;iBAA7C,AAAA5D,4CAAAgN,cAAA,vEAAajI;sBAAb,AAAA/E,4CAAAgN,cAAA,5EAAwBpH;AAAxB,AACE,AAAC/B,sBAAOrC,UAAUoC;;AAClB,IAAAqJ,YAAkB,AAACnI,iCAAgBC;WAAnC,AAAAjE,4CAAAmM,UAAA,IAAA,jEAAOhE;WAAP,AAAAnI,4CAAAmM,UAAA,IAAA,jEAAY/D;oBAAZ,AAAAjH,hBACMyG,gCAASiD;IACTuB,kBAAU,iBAAA/M,mBAAA,AAAA8B,gBAAKkL;AAAL,AAAA,oBAAAhN;AAAAA;;AAAA,OAAA8B,gBAAmCmL;;;IAC7CC,aAAK,WAAK3I;AAAL,AAAU,IAAAvE,mBAAI+M;AAAJ,AAAA,oBAAA/M;AAAAA;;AAAc,OAACwF,qCAAcjB,IAAIK,WAAWa;;;AAHjE,AAAA,0FAAA,mDAAA,2CAAA,wDAIgB,CAAA,qBACI,iCAAA,AAAA,oBAAA,nCAAM8C,2DACvB,iCAAA,iFAAA,lHAACxB,iDAAgC,WAAA,XAACmG;AAAlC,AAA+C,kBAAA,XAACvB;GAAhD,qDAAwEtK,UAAU+F,eAClF,iCAAA,oFAAA,rHAACL,kDAAiC,WAAA,XAACmG;AAAnC,AAAiD,kBAAA,XAACvB;GAAlD,uDAA4EtK,UAAU+F,eACtF,iCAAA,4EAAA,7GAACL,gDAA+B,WAAA,XAACmG;AAAjC,AAA4C,kBAAA,XAACvB;GAA7C,iDAAiEtK,UAAU+F,eAC3E,iCAAA,mFAAA,pHAACL,mDAAkC,WAAA,XAACmG;AAApC,AAAiD,kBAAA,XAACvB;iFATrD,mFAAA,sFAAA,mFAAA,oFAAA,2CAAA,zcASG,qDAA0EtK,UAAU+F,icAG1E,AAAC0D,8BAAahC,KAAKC,KAAKtD,gBAAgB8C,uBAChD,AAACM,6BAAYC,KAAKC,KAAKnE,WAAWa,gBAAgB8C,cAAQ9E;;;AAMrE;;;qCAAA,rCAAM0J,kFAEH3N;AAFH,AAGE,oBAAMA;AAAN,AACE,IAAMC,MAAI,AAACC,mDAAQF;AAAnB,AACE,oDAAA,7CAACe,gFACK,AAACC,4CAAI,WAAA4M;AAAA,AAAA,IAAAC,YAAAD;QAAA,AAAAzM,4CAAA0M,UAAA,IAAA,9DAAMzM;QAAN,AAAAD,4CAAA0M,UAAA,IAAA,9DAAQxM;AAAR,AAAA,4FAAA,2CAAA,7CACGD,uGAAW,AAACrB,+BAAW,8CAAA,9CAACM,4CAAIgB;IACpCpB;;AALV;;;AAOF;;;qCAAA,rCAAM6N,kFAEH1I;AAFH,AAGE,OAACzE,qBACC,6CAAA,7CAACI,gFACK,AAACC,4CAAI,WAAA+M;AAAA,AAAA,IAAAC,YAAAD;QAAA,AAAA5M,4CAAA6M,UAAA,IAAA,9DAAM5M;QAAN,AAAAD,4CAAA6M,UAAA,IAAA,9DAAQ3M;AAAR,AAAA,4FAAA,2CAAA,7CACGD,sDAAY,AAACX,+BAAW,AAAA,wFAASY;IACzC+D;;AAEV;;;gCAAA,wCAAA6I,xEAAOE;AAAP,AAAA,IAAAD,YAAAD;IAAAC,gBAAA,AAAA3L,4BAAA2L;6BAAA,AAAA7N,4CAAA6N,cAAA,nFAG8BM;iBAH9B,AAAAnO,4CAAA6N,cAAA,vEAEW9I;mBAFX,AAAA/E,4CAAA6N,cAAA,zEAEqCG;yBAFrC,AAAAhO,4CAAA6N,cAAA,/EAGWK;qBAHX,AAAAlO,4CAAA6N,cAAA,3EAEsBE;eAFtB,AAAA/N,4CAAA6N,cAAA,rEAEkDrK;oBAFlD,AAAAxD,4CAAA6N,cAAA,1EAG0EQ;uBAH1E,AAAArO,4CAAA6N,cAAA,7EAE2DI;2BAF3D,AAAAjO,4CAAA6N,cAAA,jFAGqDO;AAHrD,AAAA,0HAAA,wCAAA,2FAAA,wEAAA,6DAAA,gFAAA,qFAAA,2EAAA,+FAAA,0EAAA,jsBAIG1C,wxBAGgBsC,aACL,AAACvN,iCAAa+C,UACJyK,iBACE,sCAAA,pBAAMC,oBACJ,WAAKI,/IAKJF;AALD,AACE,IAAAG,UAAoB,AAACd,mCAAea;AAApC,AAAA,4GAAAC,wCAAAA,5IAACL,mDAAAA,4DAAAA;GAFL,oBAGK,0CAAA,xBAAMC,wBACJ,WAAKnH,nEAGjBqH;AAHY,AACE,IAAAG,UAAwB,AAAClO,qBAAQ0G;AAAjC,AAAA,oHAAAwH,4CAAAA,xJAACL,uDAAAA,gEAAAA;4EAVpB,AAACb,mCAAevI,tGACX,AAAClF,mDAAQkO,zDAOC;;AAU/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAKU,8BAqCH,AAACC,8DAAqBZ","names":["iris-layout.core/generate-id","cljs.core/random-uuid","iris-layout.core/js->layout","js-obj","obj","cljs.core.js__GT_clj","G__7008","cljs.core.keyword","cljs.core.get","cljs.core.assoc","cljs.core.mapv","or__5002__auto__","iris-layout.core/layout->js","layout","cljs.core/clj->js","G__7009","cljs.core/name","iris-layout.core/js->entities","cljs.core.into","cljs.core.map","p__7010","vec__7011","cljs.core.nth","k","v","cljs.core/map?","p__7014","vec__7015","k2","v2","iris-layout.core/body-stage-component","_","props-ref","cljs.core.atom","handle-split","tile-id","entity-id","split-direction","source-type","half","map__7018","cljs.core/deref","cljs.core/--destructure-map","on-layout-change","before?","cljs.core._EQ_","base-layout","iris-layout.layout/remove-entity-from-layout","target-after","iris-layout.layout/find-tile","new-tile-id","split-id","new-layout","iris_layout.layout.split_tile","and__5000__auto__","handle-close","map__7019","on-entity-close","handle-ratio","new-ratio","map__7020","iris-layout.layout/update-split-ratio","p__7021","map__7022","entities","render-entity-tile","active-entity","on-active-entity-change","props","cljs.core/reset!","fs-id","iris-layout.components.entity-tile/fullscreen-tile","fs-node","fs-entity","iris-layout.components.entity-tile-group/entity-tile-group","e","p__7023","vec__7024","iris-layout.core/pos-key","x","y","iris-layout.core/direction->delta","dir","G__7027","cljs.core/Keyword","js/Error","iris-layout.core/grid-dimensions","workspaces","cljs.core/empty?","positions","parts","js/parseInt","cljs.core/keys","max-x","cljs.core.apply","cljs.core/max","cljs.core/first","max-y","cljs.core/second","iris-layout.core/can-navigate?","active-position","vec__7028","vec__7031","dx","dy","new-x","new-y","new-key","active-key","current-empty?","target-exists?","cljs.core/contains?","target-has-layout?","cljs.core/not","iris-layout.core/handle-grid-nav","map__7034","on-workspaces-change","on-active-position-change","vec__7035","vec__7038","new-pos","G__7041","iris-layout.core/nav-edge-hiccup","css-class","visible?","on-click","direction","nav-drag-edge","iris-layout.core/update-workspaces-with-cleanup","target-key","dragged-entity","iris-layout.components.entity-tile/drag-source-entity","cljs.core/reduce-kv","acc","ws-key","ws-data","cleaned","iris-layout.core/handle-empty-workspace-drop","raw","e7042","data","js/JSON.parse","updated","iris-layout.core/grid-cell","workspace","active?","zoomed?","map__7043","vec__7044","G__7047","G__7048","G__7049","iris-layout.core/grid-canvas","cols","rows","iter__5480__auto__","s__7051","cljs.core/LazySeq","temp__5804__auto__","cljs.core/seq","cljs.core/chunked-seq?","c__5478__auto__","size__5479__auto__","cljs.core/count","b__7053","cljs.core/chunk-buffer","i__7052","cljs.core/-nth","cljs.core/chunk-append","cljs.core/chunk-cons","cljs.core/chunk","iter__7050","cljs.core/chunk-rest","cljs.core/cons","cljs.core/rest","cljs.core.range","s__7055","b__7057","i__7056","iter__7054","s__7059","b__7061","i__7060","iter__7058","iris-layout.core/grid-gap","iris-layout.core/camera-style","vec__7062","ax","ay","scale","x__5087__auto__","y__5088__auto__","tx","ty","iris-layout.core/grid-component","zoomed-out?","reagent.core.atom","touch-nav-happened?","handle-nav","keydown-handler","G__7065","keyup-handler","js/document","cljs.core/add-watch","iris-layout.components.touch-drag/nav-edge-target","old-dir","new-dir","cljs.core.not_EQ_","iris-layout.components.touch-drag/drop-result","drop-info","map__7066","map__7067","source-entity-id","new-tile","existing-layout","p__7068","map__7069","vec__7070","dragging?","iris-layout.components.entity-tile/drag-source-tile","iris-layout.components.touch-drag/touch-state","vis?","iris-layout.core/js->workspaces","p__7073","vec__7074","iris-layout.core/workspaces->js","p__7077","vec__7078","p__7081","map__7082","iris-layout.core/grid-wrapper","activePosition","activeEntity","renderEntityTile","onWorkspacesChange","onActivePositionChange","onActiveEntityChange","onEntityClose","new-workspaces","G__7083","G__7084","iris-layout.core/IrisLayout","reagent.core.reactify_component","cljs.core/chunk-first"],"sourcesContent":["(ns iris-layout.core\n \"iris-layout \u2014 a 2D tiling workspace grid for React.\n\n Exports a single React component: `IrisLayout`\n\n See the `IrisLayout` def for full props documentation.\"\n (:require [reagent.core :as r]\n [iris-layout.layout :as layout]\n [iris-layout.components.entity-tile-group :as entity-tile-group]\n [iris-layout.components.entity-tile :as entity-tile]\n [iris-layout.components.touch-drag :as touch-drag]))\n\n;; ============================================================\n;; JS <-> CLJS boundary conversion\n;; ============================================================\n\n(defn- generate-id []\n (str \"iris-\" (random-uuid)))\n\n(defn js->layout\n \"Convert a JS layout object to a CLJS layout map.\n Handles recursive conversion of the tree structure.\n JS keys: type, id, direction, ratio, children, entityId\n CLJS keys: :type, :id, :direction, :ratio, :children, :entity-id\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (cond-> {:type (keyword (get obj \"type\"))\n :id (get obj \"id\")}\n (get obj \"direction\") (assoc :direction (keyword (get obj \"direction\")))\n (get obj \"ratio\") (assoc :ratio (get obj \"ratio\"))\n (get obj \"children\") (assoc :children (mapv js->layout (get obj \"children\")))\n (or (get obj \"entityId\")\n (get obj \"entity-id\")) (assoc :entity-id (or (get obj \"entityId\")\n (get obj \"entity-id\")))))))\n\n(defn layout->js\n \"Convert a CLJS layout map to a JS object.\n Inverse of js->layout.\"\n [layout]\n (when layout\n (clj->js\n (cond-> {\"type\" (name (:type layout))\n \"id\" (:id layout)}\n (:direction layout) (assoc \"direction\" (name (:direction layout)))\n (:ratio layout) (assoc \"ratio\" (:ratio layout))\n (:children layout) (assoc \"children\" (mapv layout->js (:children layout)))\n (:entity-id layout) (assoc \"entityId\" (:entity-id layout))))))\n\n(defn js->entities\n \"Convert a JS entities object to a CLJS map.\n Top-level keys stay as strings (entity IDs), nested keys are keywordized.\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (into {}\n (map (fn [[k v]]\n [k (if (map? v)\n (into {} (map (fn [[k2 v2]] [(keyword k2) v2]) v))\n v)]))\n obj))))\n\n\n;; ============================================================\n;; Body stage \u2014 single workspace layout renderer\n;; ============================================================\n\n(defn- body-stage-component\n \"A single layout stage within the Body.\n\n Manages drag-drop split operations:\n - Sidebar drags: adds entity to layout via split\n - Tile rearranges: removes entity from source, splits at target\n\n Props:\n :layout - layout tree (CLJS map)\n :entities - entity data map\n :render-entity-tile - React component for tile content\n :active-entity - focused entity ID\n :on-layout-change - fn(new-layout) for layout mutations\n :on-active-entity-change - fn(entity-id) for focus changes\"\n [_]\n (let [props-ref (atom nil)\n handle-split (fn [tile-id entity-id split-direction source-type half]\n (let [{:keys [layout on-layout-change]} @props-ref\n before? (or (= half :left) (= half :top))\n base-layout (if (= source-type :tile)\n (or (layout/remove-entity-from-layout layout entity-id)\n layout)\n layout)\n target-after (layout/find-tile base-layout tile-id)\n new-tile-id (generate-id)\n split-id (generate-id)\n new-layout (when target-after\n (layout/split-tile\n base-layout tile-id split-direction\n entity-id new-tile-id split-id before?))]\n (when (and new-layout on-layout-change)\n (on-layout-change new-layout))))\n handle-close (fn [entity-id]\n (let [{:keys [layout on-layout-change on-entity-close]} @props-ref\n new-layout (layout/remove-entity-from-layout layout entity-id)]\n (when on-layout-change\n (on-layout-change new-layout))\n (when on-entity-close\n (on-entity-close entity-id))))\n handle-ratio (fn [split-id new-ratio]\n (let [{:keys [layout on-layout-change]} @props-ref\n new-layout (layout/update-split-ratio layout split-id new-ratio)]\n (when on-layout-change\n (on-layout-change new-layout))))]\n (fn [{:keys [layout entities render-entity-tile active-entity on-layout-change on-active-entity-change] :as props}]\n (reset! props-ref props)\n (let [fs-id @entity-tile/fullscreen-tile\n fs-node (when fs-id (layout/find-tile layout fs-id))\n fs-entity (when fs-node (get entities (:entity-id fs-node)))]\n [:div.iris-body-stage\n [entity-tile-group/entity-tile-group\n layout handle-split handle-close handle-ratio active-entity entities render-entity-tile on-active-entity-change]\n (when fs-node\n [:div.iris-fullscreen-overlay\n {:style (when (:color fs-entity) {\"--iris-tile-color\" (:color fs-entity)})}\n [:div.iris-fullscreen-overlay-header\n {:on-double-click (fn [_] (reset! entity-tile/fullscreen-tile nil))}\n [:span.iris-entity-tile-header-name\n (or (:name fs-entity) (:entity-id fs-node))]\n [:button.iris-entity-tile-header-close\n {:on-click (fn [e]\n (.stopPropagation e)\n (reset! entity-tile/fullscreen-tile nil))}\n \"\\u00d7\"]]\n [:div.iris-entity-tile-content\n (when (and fs-entity render-entity-tile)\n [:> render-entity-tile fs-entity])]])]))))\n\n\n;; ============================================================\n;; Grid \u2014 2D workspace grid with camera-based navigation\n;; ============================================================\n\n(defn- pos-key\n \"Convert [x y] to string key 'x,y'.\"\n [[x y]]\n (str x \",\" y))\n\n(defn- direction->delta\n \"Map a direction keyword to [dx dy].\"\n [dir]\n (case dir\n :left [-1 0]\n :right [1 0]\n :up [0 -1]\n :down [0 1]))\n\n(defn- grid-dimensions\n \"Compute grid bounds from workspace keys. Returns [cols rows].\"\n [workspaces]\n (if (empty? workspaces)\n [1 1]\n (let [positions (map (fn [k]\n (let [parts (.split k \",\")]\n [(js/parseInt (aget parts 0))\n (js/parseInt (aget parts 1))]))\n (keys workspaces))\n max-x (apply max (map first positions))\n max-y (apply max (map second positions))]\n [(inc max-x) (inc max-y)])))\n\n(defn- can-navigate?\n \"Check if navigation in a direction is allowed.\"\n [dir workspaces active-position]\n (let [[dx dy] (direction->delta dir)\n [x y] active-position\n new-x (+ x dx)\n new-y (+ y dy)\n new-key (pos-key [new-x new-y])\n active-key (pos-key active-position)\n current-empty? (nil? (:layout (get workspaces active-key)))\n target-exists? (contains? workspaces new-key)\n target-has-layout? (and target-exists?\n (:layout (get workspaces new-key)))]\n (and (>= new-x 0) (>= new-y 0)\n (not (and current-empty? (not target-has-layout?))))))\n\n(defn- handle-grid-nav\n \"Handle navigation in a direction. Creates empty workspace if needed.\"\n [dir props-ref]\n (let [{:keys [workspaces active-position\n on-workspaces-change on-active-position-change]} @props-ref]\n (when (can-navigate? dir workspaces active-position)\n (let [[dx dy] (direction->delta dir)\n [x y] active-position\n new-pos [(+ x dx) (+ y dy)]\n new-key (pos-key new-pos)\n target-exists? (contains? workspaces new-key)]\n (when (and (not target-exists?) on-workspaces-change)\n (on-workspaces-change (assoc workspaces new-key {:layout nil})))\n (when on-active-position-change\n (on-active-position-change new-pos))))))\n\n(defn- nav-edge-hiccup\n \"Return hiccup for a navigation edge button with half-circle indicator.\n During drag, hovering navigates to adjacent workspace (user keeps dragging to drop there).\"\n [css-class visible? on-click direction props-ref nav-drag-edge]\n [:div {:class (str \"iris-nav-edge \" css-class\n (when-not visible? \" iris-nav-hidden\")\n (when (= @nav-drag-edge direction) \" iris-nav-drag-over\"))\n :on-click on-click\n :on-drag-over (fn [e] (.preventDefault e))\n :on-drag-enter (fn [e]\n (.preventDefault e)\n (reset! nav-drag-edge direction)\n (handle-grid-nav direction props-ref))\n :on-drag-leave (fn [e]\n (when-not (.contains (.-currentTarget e) (.-relatedTarget e))\n (reset! nav-drag-edge nil)))\n :on-drop (fn [e]\n (.preventDefault e)\n (.stopPropagation e)\n (reset! nav-drag-edge nil))}\n [:div.iris-nav-semicircle]])\n\n(defn- update-workspaces-with-cleanup\n \"Update a workspace's layout and remove dragged entity from all other workspaces.\"\n [workspaces target-key new-layout]\n (let [dragged-entity @entity-tile/drag-source-entity]\n (if dragged-entity\n (reduce-kv\n (fn [acc ws-key ws-data]\n (if (= ws-key target-key)\n (assoc acc ws-key {:layout new-layout})\n (let [cleaned (layout/remove-entity-from-layout\n (:layout ws-data) dragged-entity)]\n (assoc acc ws-key {:layout cleaned}))))\n {} workspaces)\n (assoc workspaces target-key {:layout new-layout}))))\n\n(defn- handle-empty-workspace-drop\n \"Handle drop on an empty workspace \u2014 create a tile for the dropped entity.\"\n [e k workspaces on-workspaces-change]\n (.preventDefault e)\n (let [raw (.getData (.-dataTransfer e) \"text/plain\")]\n (try\n (let [data (js/JSON.parse raw)\n entity-id (.-entityId data)]\n (when entity-id\n (let [new-layout {:type :tile :id (generate-id) :entity-id entity-id}\n updated (update-workspaces-with-cleanup workspaces k new-layout)]\n (on-workspaces-change updated))))\n (catch :default _ nil))))\n\n(defn- grid-cell\n \"Render a single grid cell (workspace or empty placeholder).\"\n [k workspace active? zoomed? props]\n (let [{:keys [entities render-entity-tile active-entity\n on-workspaces-change on-active-position-change on-entity-close\n on-active-entity-change workspaces]} props\n [x y] (mapv js/parseInt (.split k \",\"))]\n [:div {:class (str \"iris-grid-cell\"\n (when active? \" iris-grid-cell-active\"))\n :data-position k\n :on-mouse-enter (when (and zoomed? (not active?))\n (fn [_]\n (when on-active-position-change\n (on-active-position-change [x y]))))\n :on-click (when (and zoomed? (not active?))\n (fn [_]\n (when on-active-position-change\n (on-active-position-change [x y]))))}\n (if (:layout workspace)\n [body-stage-component\n {:layout (:layout workspace)\n :entities entities\n :render-entity-tile render-entity-tile\n :active-entity (when active? active-entity)\n :on-active-entity-change on-active-entity-change\n :on-layout-change\n (fn [new-layout]\n (when on-workspaces-change\n (on-workspaces-change\n (update-workspaces-with-cleanup workspaces k new-layout))))\n :on-entity-close on-entity-close}]\n [:div.iris-empty-workspace\n {:on-drag-over (fn [e] (.preventDefault e))\n :on-drop (fn [e]\n (when on-workspaces-change\n (handle-empty-workspace-drop e k workspaces on-workspaces-change)))}])]))\n\n(defn- grid-canvas\n \"Render the CSS grid canvas with all workspace cells.\"\n [cols rows workspaces active-position zoomed? props]\n (let [active-key (pos-key active-position)]\n (for [y (range rows)]\n (for [x (range cols)]\n (let [k (pos-key [x y])\n workspace (get workspaces k)]\n ^{:key k}\n [grid-cell k workspace (= k active-key) zoomed? props])))))\n\n(def ^:private grid-gap 16)\n\n(defn- camera-style\n \"Compute the CSS transform style for the grid canvas camera.\n Uses calc() to account for the gap between grid cells.\"\n [cols rows active-position zoomed?]\n (let [[ax ay] active-position\n scale (if zoomed? (/ 1 (max cols rows)) 1)\n ;; Each cell is (100% - (n-1)*gap) / n wide, plus gap between cells.\n ;; Offset for position p = p * (100% / n) but we also shift by p * gap / n\n ;; to center each cell. Simplest: calc(-ax * (100% + gap) / cols)\n tx (if zoomed?\n \"0px\"\n (str \"calc(\" ax \" * ((-100% - \" grid-gap \"px) / \" cols \"))\"))\n ty (if zoomed?\n \"0px\"\n (str \"calc(\" ay \" * ((-100% - \" grid-gap \"px) / \" rows \"))\"))]\n {:width (str \"calc(\" cols \" * 100% + \" (* (dec cols) grid-gap) \"px)\")\n :height (str \"calc(\" rows \" * 100% + \" (* (dec rows) grid-gap) \"px)\")\n :grid-template-columns (str \"repeat(\" cols \", 1fr)\")\n :grid-template-rows (str \"repeat(\" rows \", 1fr)\")\n :transform (str \"translate(\" tx \", \" ty \") scale(\" scale \")\")\n :transform-origin \"0 0\"}))\n\n(defn grid-component\n \"Grid \u2014 a 2D grid of workspaces with camera-based navigation.\n\n Workspaces are laid out in a real CSS grid. Navigation moves a camera\n (CSS translate) to show the active workspace. Holding Alt zooms out\n to show all workspaces at once.\"\n [_]\n (let [zoomed-out? (r/atom false)\n props-ref (atom nil)\n nav-drag-edge (r/atom nil)\n touch-nav-happened? (atom false)\n handle-nav (fn [dir] (handle-grid-nav dir props-ref))\n keydown-handler (fn [e]\n (when (and (= (.-key e) \"Alt\") (not (.-repeat e)))\n (reset! zoomed-out? true))\n (when (.-altKey e)\n (let [dir (case (.-key e)\n \"ArrowLeft\" :left\n \"ArrowRight\" :right\n \"ArrowUp\" :up\n \"ArrowDown\" :down\n nil)]\n (when dir\n (.preventDefault e)\n ;; Exit zoom-out first, then navigate (so slide is visible)\n (reset! zoomed-out? false)\n (handle-nav dir)))))\n keyup-handler (fn [e]\n (when (= (.-key e) \"Alt\")\n (reset! zoomed-out? false)))]\n (.addEventListener js/document \"keydown\" keydown-handler)\n (.addEventListener js/document \"keyup\" keyup-handler)\n ;; Watch touch-drag nav-edge-target for highlight + navigation\n (add-watch touch-drag/nav-edge-target ::grid-nav-highlight\n (fn [_ _ old-dir new-dir]\n (reset! nav-drag-edge new-dir)\n ;; Navigate when touch enters a nav edge\n (when (and new-dir (not= old-dir new-dir))\n (reset! touch-nav-happened? true)\n (handle-grid-nav new-dir props-ref))))\n ;; Watch touch-drag drop-result for drops with no target tile after workspace nav\n (add-watch touch-drag/drop-result ::grid-touch-drop\n (fn [_ _ _ drop-info]\n (when (and drop-info\n (not (:target-tile-id drop-info))\n @touch-nav-happened?)\n (let [{:keys [source-entity-id]} drop-info\n {:keys [workspaces active-position on-workspaces-change]} @props-ref\n active-key (pos-key active-position)]\n (when (and source-entity-id on-workspaces-change)\n (let [new-tile {:type :tile :id (generate-id) :entity-id source-entity-id}\n existing-layout (:layout (get workspaces active-key))\n new-layout (if existing-layout\n ;; Add alongside existing layout\n {:type :split :id (generate-id)\n :direction :horizontal :ratio 0.5\n :children [existing-layout new-tile]}\n new-tile)\n updated (reduce-kv\n (fn [acc ws-key ws-data]\n (if (= ws-key active-key)\n (assoc acc ws-key {:layout new-layout})\n (let [cleaned (layout/remove-entity-from-layout\n (:layout ws-data) source-entity-id)]\n (assoc acc ws-key {:layout cleaned}))))\n {} workspaces)]\n (on-workspaces-change updated))))\n (reset! touch-drag/drop-result nil))\n (reset! touch-nav-happened? false)))\n (fn [{:keys [workspaces active-position] :as props}]\n (reset! props-ref props)\n (let [[cols rows] (grid-dimensions workspaces)\n zoomed? @zoomed-out?\n dragging? (or @entity-tile/drag-source-tile @touch-drag/touch-state)\n vis? (fn [dir] (or dragging? (can-navigate? dir workspaces active-position)))]\n [:div {:class (str \"iris-grid-viewport\"\n (when zoomed? \" iris-grid-zoomed\"))}\n (nav-edge-hiccup \"iris-nav-left\" (vis? :left) #(handle-nav :left) :left props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-right\" (vis? :right) #(handle-nav :right) :right props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-top\" (vis? :up) #(handle-nav :up) :up props-ref nav-drag-edge)\n (nav-edge-hiccup \"iris-nav-bottom\" (vis? :down) #(handle-nav :down) :down props-ref nav-drag-edge)\n [:div.iris-grid-center\n [:div.iris-grid-canvas\n {:style (camera-style cols rows active-position zoomed?)}\n (grid-canvas cols rows workspaces active-position zoomed? props)]]]))))\n\n;; ============================================================\n;; JS <-> CLJS: Grid conversions\n;; ============================================================\n\n(defn js->workspaces\n \"Convert a JS workspaces object {\\\"x,y\\\": {layout: ...}} to CLJS map.\"\n [js-obj]\n (when js-obj\n (let [obj (js->clj js-obj)]\n (into {}\n (map (fn [[k v]]\n [k {:layout (js->layout (get v \"layout\"))}]))\n obj))))\n\n(defn workspaces->js\n \"Convert CLJS workspaces map to JS object.\"\n [workspaces]\n (clj->js\n (into {}\n (map (fn [[k v]]\n [k {\"layout\" (layout->js (:layout v))}]))\n workspaces)))\n\n(defn- grid-wrapper\n \"Wrapper that converts JS props to CLJS for grid-component.\"\n [{:keys [workspaces activePosition activeEntity entities renderEntityTile\n onWorkspacesChange onActivePositionChange onActiveEntityChange onEntityClose]}]\n [grid-component\n {:workspaces (js->workspaces workspaces)\n :active-position (js->clj activePosition)\n :active-entity activeEntity\n :entities (js->entities entities)\n :render-entity-tile renderEntityTile\n :on-workspaces-change (when onWorkspacesChange\n (fn [new-workspaces]\n (onWorkspacesChange (workspaces->js new-workspaces))))\n :on-active-position-change (when onActivePositionChange\n (fn [new-pos]\n (onActivePositionChange (clj->js new-pos))))\n :on-active-entity-change onActiveEntityChange\n :on-entity-close onEntityClose}])\n\n;; ============================================================\n;; Exported React component\n;; ============================================================\n\n(def IrisLayout\n \"A 2D tiling workspace grid for React.\n\n Renders an infinite grid of workspaces navigated by arrow clicks or\n Alt+Arrow keys. Each workspace contains a resizable, drag-and-drop\n tile layout. Hold Alt to zoom out and see the full grid overview.\n\n Props (camelCase JS object):\n\n workspaces - Object keyed by 'x,y' position strings.\n Each value: { layout: LayoutNode }\n LayoutNode is either:\n { type: 'tile', id, entityId }\n { type: 'split', id, direction: 'horizontal'|'vertical',\n ratio: 0-1, children: [LayoutNode, LayoutNode] }\n\n activePosition - [x, y] array \u2014 which workspace is visible.\n\n activeEntity - Entity ID string of the focused tile (or null).\n\n entities - Object keyed by entity ID.\n Each value: { id, name, ... } (your domain data).\n\n renderEntityTile - React component rendered inside each tile.\n Receives the entity object as props.\n\n onWorkspacesChange - fn(workspaces) \u2014 called on layout mutations\n (splits, closes, resizes, cross-workspace drags).\n\n onActivePositionChange - fn([x, y]) \u2014 called when navigating between workspaces.\n\n onActiveEntityChange - fn(entityId) \u2014 called when a tile gains focus.\n\n onEntityClose - fn(entityId) \u2014 optional hook when a tile is closed.\n\n CSS: import '@p4ulcristian/iris-layout/styles.css'\n Customize gap: set --iris-grid-gap on a parent element.\"\n (r/reactify-component grid-wrapper))\n"]}