@p4ulcristian/iris-layout 0.2.10 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/iris-layout.js +80 -56
- package/dist/styles.css +253 -2
- package/package.json +1 -1
- package/dist/cljs-runtime/cljs.core.js +0 -38746
- package/dist/cljs-runtime/cljs.core.js.map +0 -1
- package/dist/cljs-runtime/cljs.pprint.js +0 -8400
- package/dist/cljs-runtime/cljs.pprint.js.map +0 -1
- package/dist/cljs-runtime/cljs.stacktrace.js +0 -561
- package/dist/cljs-runtime/cljs.stacktrace.js.map +0 -1
- package/dist/cljs-runtime/cljs_env.js +0 -1286
- package/dist/cljs-runtime/clojure.data.js +0 -295
- package/dist/cljs-runtime/clojure.data.js.map +0 -1
- package/dist/cljs-runtime/clojure.set.js +0 -382
- package/dist/cljs-runtime/clojure.set.js.map +0 -1
- package/dist/cljs-runtime/clojure.string.js +0 -480
- package/dist/cljs-runtime/clojure.string.js.map +0 -1
- package/dist/cljs-runtime/clojure.walk.js +0 -132
- package/dist/cljs-runtime/clojure.walk.js.map +0 -1
- package/dist/cljs-runtime/devtools.async.js +0 -90
- package/dist/cljs-runtime/devtools.async.js.map +0 -1
- package/dist/cljs-runtime/devtools.context.js +0 -11
- package/dist/cljs-runtime/devtools.context.js.map +0 -1
- package/dist/cljs-runtime/devtools.core.js +0 -175
- package/dist/cljs-runtime/devtools.core.js.map +0 -1
- package/dist/cljs-runtime/devtools.defaults.js +0 -20
- package/dist/cljs-runtime/devtools.defaults.js.map +0 -1
- package/dist/cljs-runtime/devtools.format.js +0 -631
- package/dist/cljs-runtime/devtools.format.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.budgeting.js +0 -182
- package/dist/cljs-runtime/devtools.formatters.budgeting.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.core.js +0 -220
- package/dist/cljs-runtime/devtools.formatters.core.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.helpers.js +0 -228
- package/dist/cljs-runtime/devtools.formatters.helpers.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.js +0 -261
- package/dist/cljs-runtime/devtools.formatters.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.markup.js +0 -1174
- package/dist/cljs-runtime/devtools.formatters.markup.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.printing.js +0 -313
- package/dist/cljs-runtime/devtools.formatters.printing.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.state.js +0 -325
- package/dist/cljs-runtime/devtools.formatters.state.js.map +0 -1
- package/dist/cljs-runtime/devtools.formatters.templating.js +0 -666
- package/dist/cljs-runtime/devtools.formatters.templating.js.map +0 -1
- package/dist/cljs-runtime/devtools.hints.js +0 -193
- package/dist/cljs-runtime/devtools.hints.js.map +0 -1
- package/dist/cljs-runtime/devtools.munging.js +0 -1058
- package/dist/cljs-runtime/devtools.munging.js.map +0 -1
- package/dist/cljs-runtime/devtools.prefs.js +0 -87
- package/dist/cljs-runtime/devtools.prefs.js.map +0 -1
- package/dist/cljs-runtime/devtools.preload.js +0 -11
- package/dist/cljs-runtime/devtools.preload.js.map +0 -1
- package/dist/cljs-runtime/devtools.protocols.js +0 -98
- package/dist/cljs-runtime/devtools.protocols.js.map +0 -1
- package/dist/cljs-runtime/devtools.reporter.js +0 -81
- package/dist/cljs-runtime/devtools.reporter.js.map +0 -1
- package/dist/cljs-runtime/devtools.toolbox.js +0 -141
- package/dist/cljs-runtime/devtools.toolbox.js.map +0 -1
- package/dist/cljs-runtime/devtools.util.js +0 -517
- package/dist/cljs-runtime/devtools.util.js.map +0 -1
- package/dist/cljs-runtime/devtools.version.js +0 -9
- package/dist/cljs-runtime/devtools.version.js.map +0 -1
- package/dist/cljs-runtime/goog.array.array.js +0 -659
- package/dist/cljs-runtime/goog.array.array.js.map +0 -9
- package/dist/cljs-runtime/goog.asserts.asserts.js +0 -133
- package/dist/cljs-runtime/goog.asserts.asserts.js.map +0 -9
- package/dist/cljs-runtime/goog.asserts.dom.js +0 -90
- package/dist/cljs-runtime/goog.asserts.dom.js.map +0 -9
- package/dist/cljs-runtime/goog.async.nexttick.js +0 -93
- package/dist/cljs-runtime/goog.async.nexttick.js.map +0 -9
- package/dist/cljs-runtime/goog.base.js +0 -1261
- package/dist/cljs-runtime/goog.base.js.map +0 -9
- package/dist/cljs-runtime/goog.collections.maps.js +0 -82
- package/dist/cljs-runtime/goog.collections.maps.js.map +0 -9
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js +0 -44
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js.map +0 -9
- package/dist/cljs-runtime/goog.debug.error.js +0 -30
- package/dist/cljs-runtime/goog.debug.error.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.asserts.js +0 -40
- package/dist/cljs-runtime/goog.dom.asserts.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.browserfeature.js +0 -21
- package/dist/cljs-runtime/goog.dom.browserfeature.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.dom.js +0 -1087
- package/dist/cljs-runtime/goog.dom.dom.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.element.js +0 -69
- package/dist/cljs-runtime/goog.dom.element.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.htmlelement.js +0 -7
- package/dist/cljs-runtime/goog.dom.htmlelement.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.nodetype.js +0 -6
- package/dist/cljs-runtime/goog.dom.nodetype.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.safe.js +0 -277
- package/dist/cljs-runtime/goog.dom.safe.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.tagname.js +0 -147
- package/dist/cljs-runtime/goog.dom.tagname.js.map +0 -9
- package/dist/cljs-runtime/goog.dom.tags.js +0 -10
- package/dist/cljs-runtime/goog.dom.tags.js.map +0 -9
- package/dist/cljs-runtime/goog.flags.flags.js +0 -12
- package/dist/cljs-runtime/goog.flags.flags.js.map +0 -9
- package/dist/cljs-runtime/goog.fs.blob.js +0 -38
- package/dist/cljs-runtime/goog.fs.blob.js.map +0 -9
- package/dist/cljs-runtime/goog.fs.url.js +0 -37
- package/dist/cljs-runtime/goog.fs.url.js.map +0 -9
- package/dist/cljs-runtime/goog.functions.functions.js +0 -211
- package/dist/cljs-runtime/goog.functions.functions.js.map +0 -9
- package/dist/cljs-runtime/goog.html.safehtml.js +0 -321
- package/dist/cljs-runtime/goog.html.safehtml.js.map +0 -9
- package/dist/cljs-runtime/goog.html.safescript.js +0 -65
- package/dist/cljs-runtime/goog.html.safescript.js.map +0 -9
- package/dist/cljs-runtime/goog.html.safestyle.js +0 -175
- package/dist/cljs-runtime/goog.html.safestyle.js.map +0 -9
- package/dist/cljs-runtime/goog.html.safestylesheet.js +0 -99
- package/dist/cljs-runtime/goog.html.safestylesheet.js.map +0 -9
- package/dist/cljs-runtime/goog.html.safeurl.js +0 -231
- package/dist/cljs-runtime/goog.html.safeurl.js.map +0 -9
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js +0 -123
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js.map +0 -9
- package/dist/cljs-runtime/goog.html.trustedtypes.js +0 -16
- package/dist/cljs-runtime/goog.html.trustedtypes.js.map +0 -9
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js +0 -52
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.browser.js +0 -352
- package/dist/cljs-runtime/goog.labs.useragent.browser.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.engine.js +0 -73
- package/dist/cljs-runtime/goog.labs.useragent.engine.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js +0 -14
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js +0 -74
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.platform.js +0 -147
- package/dist/cljs-runtime/goog.labs.useragent.platform.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js +0 -21
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js.map +0 -9
- package/dist/cljs-runtime/goog.labs.useragent.util.js +0 -81
- package/dist/cljs-runtime/goog.labs.useragent.util.js.map +0 -9
- package/dist/cljs-runtime/goog.math.coordinate.js +0 -97
- package/dist/cljs-runtime/goog.math.coordinate.js.map +0 -9
- package/dist/cljs-runtime/goog.math.integer.js +0 -445
- package/dist/cljs-runtime/goog.math.integer.js.map +0 -9
- package/dist/cljs-runtime/goog.math.long.js +0 -437
- package/dist/cljs-runtime/goog.math.long.js.map +0 -9
- package/dist/cljs-runtime/goog.math.math.js +0 -158
- package/dist/cljs-runtime/goog.math.math.js.map +0 -9
- package/dist/cljs-runtime/goog.math.size.js +0 -76
- package/dist/cljs-runtime/goog.math.size.js.map +0 -9
- package/dist/cljs-runtime/goog.object.object.js +0 -284
- package/dist/cljs-runtime/goog.object.object.js.map +0 -9
- package/dist/cljs-runtime/goog.reflect.reflect.js +0 -32
- package/dist/cljs-runtime/goog.reflect.reflect.js.map +0 -9
- package/dist/cljs-runtime/goog.string.const.js +0 -35
- package/dist/cljs-runtime/goog.string.const.js.map +0 -9
- package/dist/cljs-runtime/goog.string.internal.js +0 -119
- package/dist/cljs-runtime/goog.string.internal.js.map +0 -9
- package/dist/cljs-runtime/goog.string.string.js +0 -462
- package/dist/cljs-runtime/goog.string.string.js.map +0 -9
- package/dist/cljs-runtime/goog.string.stringbuffer.js +0 -32
- package/dist/cljs-runtime/goog.string.stringbuffer.js.map +0 -9
- package/dist/cljs-runtime/goog.string.typedstring.js +0 -9
- package/dist/cljs-runtime/goog.string.typedstring.js.map +0 -9
- package/dist/cljs-runtime/goog.structs.structs.js +0 -199
- package/dist/cljs-runtime/goog.structs.structs.js.map +0 -9
- package/dist/cljs-runtime/goog.uri.uri.js +0 -628
- package/dist/cljs-runtime/goog.uri.uri.js.map +0 -9
- package/dist/cljs-runtime/goog.uri.utils.js +0 -326
- package/dist/cljs-runtime/goog.uri.utils.js.map +0 -9
- package/dist/cljs-runtime/goog.useragent.useragent.js +0 -139
- package/dist/cljs-runtime/goog.useragent.useragent.js.map +0 -9
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js +0 -202
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js +0 -327
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js +0 -33
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.components.resizer.js +0 -91
- package/dist/cljs-runtime/iris_layout.components.resizer.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js +0 -385
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.core.js +0 -876
- package/dist/cljs-runtime/iris_layout.core.js.map +0 -1
- package/dist/cljs-runtime/iris_layout.layout.js +0 -328
- package/dist/cljs-runtime/iris_layout.layout.js.map +0 -1
- package/dist/cljs-runtime/reagent.core.js +0 -993
- package/dist/cljs-runtime/reagent.core.js.map +0 -1
- package/dist/cljs-runtime/reagent.debug.js +0 -75
- package/dist/cljs-runtime/reagent.debug.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.batching.js +0 -270
- package/dist/cljs-runtime/reagent.impl.batching.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.component.js +0 -758
- package/dist/cljs-runtime/reagent.impl.component.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.input.js +0 -175
- package/dist/cljs-runtime/reagent.impl.input.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.protocols.js +0 -99
- package/dist/cljs-runtime/reagent.impl.protocols.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.template.js +0 -660
- package/dist/cljs-runtime/reagent.impl.template.js.map +0 -1
- package/dist/cljs-runtime/reagent.impl.util.js +0 -748
- package/dist/cljs-runtime/reagent.impl.util.js.map +0 -1
- package/dist/cljs-runtime/reagent.ratom.js +0 -1668
- package/dist/cljs-runtime/reagent.ratom.js.map +0 -1
- package/dist/cljs-runtime/shadow.esm.esm_import$react.js +0 -5
- package/dist/cljs-runtime/shadow.module.iris-layout.append.js +0 -2
- package/dist/cljs-runtime/shadow.module.iris-layout.prepend.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
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__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"]}
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import "./cljs_env.js";
|
|
2
|
-
import "./cljs.core.js";
|
|
3
|
-
goog.provide('iris_layout.layout');
|
|
4
|
-
/**
|
|
5
|
-
* Get node type as keyword (handles both keyword and string values)
|
|
6
|
-
*/
|
|
7
|
-
iris_layout.layout.node_type = (function iris_layout$layout$node_type(node){
|
|
8
|
-
return cljs.core.keyword.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node));
|
|
9
|
-
});
|
|
10
|
-
/**
|
|
11
|
-
* Create a new tile node
|
|
12
|
-
*/
|
|
13
|
-
iris_layout.layout.create_tile = (function iris_layout$layout$create_tile(id,entity_id){
|
|
14
|
-
return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"tile","tile",758132866),new cljs.core.Keyword(null,"id","id",-1388402092),id,new cljs.core.Keyword(null,"entity-id","entity-id",1485898093),entity_id], null);
|
|
15
|
-
});
|
|
16
|
-
/**
|
|
17
|
-
* Create a new split node with direction, children, and ratio
|
|
18
|
-
*/
|
|
19
|
-
iris_layout.layout.create_split = (function iris_layout$layout$create_split(id,direction,child1,child2,ratio){
|
|
20
|
-
return new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,"type","type",1174270348),new cljs.core.Keyword(null,"split","split",-599435118),new cljs.core.Keyword(null,"id","id",-1388402092),id,new cljs.core.Keyword(null,"direction","direction",-633359395),direction,new cljs.core.Keyword(null,"ratio","ratio",-926560044),(function (){var x__5090__auto__ = 0.9;
|
|
21
|
-
var y__5091__auto__ = (function (){var x__5087__auto__ = 0.1;
|
|
22
|
-
var y__5088__auto__ = ratio;
|
|
23
|
-
return ((x__5087__auto__ > y__5088__auto__) ? x__5087__auto__ : y__5088__auto__);
|
|
24
|
-
})();
|
|
25
|
-
return ((x__5090__auto__ < y__5091__auto__) ? x__5090__auto__ : y__5091__auto__);
|
|
26
|
-
})(),new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [child1,child2], null)], null);
|
|
27
|
-
});
|
|
28
|
-
/**
|
|
29
|
-
* Walk tree to find tile by ID
|
|
30
|
-
*/
|
|
31
|
-
iris_layout.layout.find_tile = (function iris_layout$layout$find_tile(tree,tile_id){
|
|
32
|
-
if((tree == null)){
|
|
33
|
-
return null;
|
|
34
|
-
} else {
|
|
35
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(tree),new cljs.core.Keyword(null,"tile","tile",758132866))){
|
|
36
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(tree),tile_id)){
|
|
37
|
-
return tree;
|
|
38
|
-
} else {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
} else {
|
|
42
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(tree),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
43
|
-
var or__5002__auto__ = (function (){var G__12195 = cljs.core.first(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
44
|
-
var G__12196 = tile_id;
|
|
45
|
-
return (iris_layout.layout.find_tile.cljs$core$IFn$_invoke$arity$2 ? iris_layout.layout.find_tile.cljs$core$IFn$_invoke$arity$2(G__12195,G__12196) : iris_layout.layout.find_tile.call(null,G__12195,G__12196));
|
|
46
|
-
})();
|
|
47
|
-
if(cljs.core.truth_(or__5002__auto__)){
|
|
48
|
-
return or__5002__auto__;
|
|
49
|
-
} else {
|
|
50
|
-
var G__12197 = cljs.core.second(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
51
|
-
var G__12198 = tile_id;
|
|
52
|
-
return (iris_layout.layout.find_tile.cljs$core$IFn$_invoke$arity$2 ? iris_layout.layout.find_tile.cljs$core$IFn$_invoke$arity$2(G__12197,G__12198) : iris_layout.layout.find_tile.call(null,G__12197,G__12198));
|
|
53
|
-
}
|
|
54
|
-
} else {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
/**
|
|
61
|
-
* Replace a node in the tree by ID with a new node
|
|
62
|
-
*/
|
|
63
|
-
iris_layout.layout.replace_node = (function iris_layout$layout$replace_node(tree,node_id,new_node){
|
|
64
|
-
if((tree == null)){
|
|
65
|
-
return null;
|
|
66
|
-
} else {
|
|
67
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(tree),node_id)){
|
|
68
|
-
return new_node;
|
|
69
|
-
} else {
|
|
70
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(tree),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
71
|
-
return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(tree,new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [(function (){var G__12199 = cljs.core.first(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
72
|
-
var G__12200 = node_id;
|
|
73
|
-
var G__12201 = new_node;
|
|
74
|
-
return (iris_layout.layout.replace_node.cljs$core$IFn$_invoke$arity$3 ? iris_layout.layout.replace_node.cljs$core$IFn$_invoke$arity$3(G__12199,G__12200,G__12201) : iris_layout.layout.replace_node.call(null,G__12199,G__12200,G__12201));
|
|
75
|
-
})(),(function (){var G__12205 = cljs.core.second(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
76
|
-
var G__12206 = node_id;
|
|
77
|
-
var G__12207 = new_node;
|
|
78
|
-
return (iris_layout.layout.replace_node.cljs$core$IFn$_invoke$arity$3 ? iris_layout.layout.replace_node.cljs$core$IFn$_invoke$arity$3(G__12205,G__12206,G__12207) : iris_layout.layout.replace_node.call(null,G__12205,G__12206,G__12207));
|
|
79
|
-
})()], null));
|
|
80
|
-
} else {
|
|
81
|
-
return tree;
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
/**
|
|
88
|
-
* Insert a split at tile position with new entity.
|
|
89
|
-
* When before? is true, new tile goes first (left/top).
|
|
90
|
-
*/
|
|
91
|
-
iris_layout.layout.split_tile = (function iris_layout$layout$split_tile(var_args){
|
|
92
|
-
var args__5732__auto__ = [];
|
|
93
|
-
var len__5726__auto___12270 = arguments.length;
|
|
94
|
-
var i__5727__auto___12271 = (0);
|
|
95
|
-
while(true){
|
|
96
|
-
if((i__5727__auto___12271 < len__5726__auto___12270)){
|
|
97
|
-
args__5732__auto__.push((arguments[i__5727__auto___12271]));
|
|
98
|
-
|
|
99
|
-
var G__12272 = (i__5727__auto___12271 + (1));
|
|
100
|
-
i__5727__auto___12271 = G__12272;
|
|
101
|
-
continue;
|
|
102
|
-
} else {
|
|
103
|
-
}
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
var argseq__5733__auto__ = ((((6) < args__5732__auto__.length))?(new cljs.core.IndexedSeq(args__5732__auto__.slice((6)),(0),null)):null);
|
|
108
|
-
return iris_layout.layout.split_tile.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]),(arguments[(4)]),(arguments[(5)]),argseq__5733__auto__);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
(iris_layout.layout.split_tile.cljs$core$IFn$_invoke$arity$variadic = (function (tree,tile_id,direction,new_entity_id,new_tile_id,split_id,p__12224){
|
|
112
|
-
var vec__12225 = p__12224;
|
|
113
|
-
var before_QMARK_ = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12225,(0),null);
|
|
114
|
-
var existing_tile = iris_layout.layout.find_tile(tree,tile_id);
|
|
115
|
-
if(cljs.core.truth_(existing_tile)){
|
|
116
|
-
var new_tile = iris_layout.layout.create_tile(new_tile_id,new_entity_id);
|
|
117
|
-
var vec__12228 = (cljs.core.truth_(before_QMARK_)?new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new_tile,existing_tile], null):new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [existing_tile,new_tile], null));
|
|
118
|
-
var child1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12228,(0),null);
|
|
119
|
-
var child2 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12228,(1),null);
|
|
120
|
-
var new_split = iris_layout.layout.create_split(split_id,direction,child1,child2,0.5);
|
|
121
|
-
return iris_layout.layout.replace_node(tree,tile_id,new_split);
|
|
122
|
-
} else {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
}));
|
|
126
|
-
|
|
127
|
-
(iris_layout.layout.split_tile.cljs$lang$maxFixedArity = (6));
|
|
128
|
-
|
|
129
|
-
/** @this {Function} */
|
|
130
|
-
(iris_layout.layout.split_tile.cljs$lang$applyTo = (function (seq12213){
|
|
131
|
-
var G__12214 = cljs.core.first(seq12213);
|
|
132
|
-
var seq12213__$1 = cljs.core.next(seq12213);
|
|
133
|
-
var G__12215 = cljs.core.first(seq12213__$1);
|
|
134
|
-
var seq12213__$2 = cljs.core.next(seq12213__$1);
|
|
135
|
-
var G__12216 = cljs.core.first(seq12213__$2);
|
|
136
|
-
var seq12213__$3 = cljs.core.next(seq12213__$2);
|
|
137
|
-
var G__12217 = cljs.core.first(seq12213__$3);
|
|
138
|
-
var seq12213__$4 = cljs.core.next(seq12213__$3);
|
|
139
|
-
var G__12218 = cljs.core.first(seq12213__$4);
|
|
140
|
-
var seq12213__$5 = cljs.core.next(seq12213__$4);
|
|
141
|
-
var G__12219 = cljs.core.first(seq12213__$5);
|
|
142
|
-
var seq12213__$6 = cljs.core.next(seq12213__$5);
|
|
143
|
-
var self__5711__auto__ = this;
|
|
144
|
-
return self__5711__auto__.cljs$core$IFn$_invoke$arity$variadic(G__12214,G__12215,G__12216,G__12217,G__12218,G__12219,seq12213__$6);
|
|
145
|
-
}));
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Find the parent split of a given node
|
|
149
|
-
*/
|
|
150
|
-
iris_layout.layout.get_parent_split = (function iris_layout$layout$get_parent_split(tree,node_id){
|
|
151
|
-
var find_parent = (function iris_layout$layout$get_parent_split_$_find_parent(node,parent){
|
|
152
|
-
if((node == null)){
|
|
153
|
-
return null;
|
|
154
|
-
} else {
|
|
155
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(node),node_id)){
|
|
156
|
-
return parent;
|
|
157
|
-
} else {
|
|
158
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
159
|
-
var or__5002__auto__ = iris_layout$layout$get_parent_split_$_find_parent(cljs.core.first(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node)),node);
|
|
160
|
-
if(cljs.core.truth_(or__5002__auto__)){
|
|
161
|
-
return or__5002__auto__;
|
|
162
|
-
} else {
|
|
163
|
-
return iris_layout$layout$get_parent_split_$_find_parent(cljs.core.second(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node)),node);
|
|
164
|
-
}
|
|
165
|
-
} else {
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
return find_parent(tree,null);
|
|
172
|
-
});
|
|
173
|
-
/**
|
|
174
|
-
* Remove a tile and collapse its parent split
|
|
175
|
-
*/
|
|
176
|
-
iris_layout.layout.merge_tile = (function iris_layout$layout$merge_tile(tree,tile_id){
|
|
177
|
-
var parent = iris_layout.layout.get_parent_split(tree,tile_id);
|
|
178
|
-
if(cljs.core.truth_(parent)){
|
|
179
|
-
var vec__12236 = new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(parent);
|
|
180
|
-
var child1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12236,(0),null);
|
|
181
|
-
var child2 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12236,(1),null);
|
|
182
|
-
var sibling = ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(child1),tile_id))?child2:child1);
|
|
183
|
-
return iris_layout.layout.replace_node(tree,new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(parent),sibling);
|
|
184
|
-
} else {
|
|
185
|
-
return tree;
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
/**
|
|
189
|
-
* Find the tile node that contains a given entity-id
|
|
190
|
-
*/
|
|
191
|
-
iris_layout.layout.find_tile_by_entity = (function iris_layout$layout$find_tile_by_entity(tree,entity_id){
|
|
192
|
-
if((tree == null)){
|
|
193
|
-
return null;
|
|
194
|
-
} else {
|
|
195
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(tree),new cljs.core.Keyword(null,"tile","tile",758132866))){
|
|
196
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"entity-id","entity-id",1485898093).cljs$core$IFn$_invoke$arity$1(tree),entity_id)){
|
|
197
|
-
return tree;
|
|
198
|
-
} else {
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
} else {
|
|
202
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(tree),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
203
|
-
var or__5002__auto__ = (function (){var G__12243 = cljs.core.first(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
204
|
-
var G__12244 = entity_id;
|
|
205
|
-
return (iris_layout.layout.find_tile_by_entity.cljs$core$IFn$_invoke$arity$2 ? iris_layout.layout.find_tile_by_entity.cljs$core$IFn$_invoke$arity$2(G__12243,G__12244) : iris_layout.layout.find_tile_by_entity.call(null,G__12243,G__12244));
|
|
206
|
-
})();
|
|
207
|
-
if(cljs.core.truth_(or__5002__auto__)){
|
|
208
|
-
return or__5002__auto__;
|
|
209
|
-
} else {
|
|
210
|
-
var G__12246 = cljs.core.second(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(tree));
|
|
211
|
-
var G__12247 = entity_id;
|
|
212
|
-
return (iris_layout.layout.find_tile_by_entity.cljs$core$IFn$_invoke$arity$2 ? iris_layout.layout.find_tile_by_entity.cljs$core$IFn$_invoke$arity$2(G__12246,G__12247) : iris_layout.layout.find_tile_by_entity.call(null,G__12246,G__12247));
|
|
213
|
-
}
|
|
214
|
-
} else {
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
/**
|
|
221
|
-
* Remove an entity from the layout tree and collapse empty splits.
|
|
222
|
-
* Returns nil if the entire tree becomes empty.
|
|
223
|
-
*/
|
|
224
|
-
iris_layout.layout.remove_entity_from_layout = (function iris_layout$layout$remove_entity_from_layout(tree,entity_id){
|
|
225
|
-
var remove_and_collapse = (function iris_layout$layout$remove_entity_from_layout_$_remove_and_collapse(node){
|
|
226
|
-
if((node == null)){
|
|
227
|
-
return null;
|
|
228
|
-
} else {
|
|
229
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"tile","tile",758132866))){
|
|
230
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"entity-id","entity-id",1485898093).cljs$core$IFn$_invoke$arity$1(node),entity_id)){
|
|
231
|
-
return null;
|
|
232
|
-
} else {
|
|
233
|
-
return node;
|
|
234
|
-
}
|
|
235
|
-
} else {
|
|
236
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
237
|
-
var vec__12254 = new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node);
|
|
238
|
-
var c1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12254,(0),null);
|
|
239
|
-
var c2 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__12254,(1),null);
|
|
240
|
-
var new_c1 = iris_layout$layout$remove_entity_from_layout_$_remove_and_collapse(c1);
|
|
241
|
-
var new_c2 = iris_layout$layout$remove_entity_from_layout_$_remove_and_collapse(c2);
|
|
242
|
-
if((new_c1 == null)){
|
|
243
|
-
return new_c2;
|
|
244
|
-
} else {
|
|
245
|
-
if((new_c2 == null)){
|
|
246
|
-
return new_c1;
|
|
247
|
-
} else {
|
|
248
|
-
return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new_c1,new_c2], null));
|
|
249
|
-
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
} else {
|
|
253
|
-
return node;
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
return remove_and_collapse(tree);
|
|
260
|
-
});
|
|
261
|
-
/**
|
|
262
|
-
* Walk layout tree and return a vector of entity IDs (in order)
|
|
263
|
-
*/
|
|
264
|
-
iris_layout.layout.collect_entity_ids = (function iris_layout$layout$collect_entity_ids(node){
|
|
265
|
-
if((node == null)){
|
|
266
|
-
return cljs.core.PersistentVector.EMPTY;
|
|
267
|
-
} else {
|
|
268
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"tile","tile",758132866))){
|
|
269
|
-
if(cljs.core.truth_(new cljs.core.Keyword(null,"entity-id","entity-id",1485898093).cljs$core$IFn$_invoke$arity$1(node))){
|
|
270
|
-
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"entity-id","entity-id",1485898093).cljs$core$IFn$_invoke$arity$1(node)], null);
|
|
271
|
-
} else {
|
|
272
|
-
return cljs.core.PersistentVector.EMPTY;
|
|
273
|
-
}
|
|
274
|
-
} else {
|
|
275
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
276
|
-
return cljs.core.into.cljs$core$IFn$_invoke$arity$2(cljs.core.PersistentVector.EMPTY,cljs.core.mapcat.cljs$core$IFn$_invoke$arity$variadic(iris_layout.layout.collect_entity_ids,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node)], 0)));
|
|
277
|
-
} else {
|
|
278
|
-
return cljs.core.PersistentVector.EMPTY;
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
/**
|
|
285
|
-
* Update the ratio of a split (clamped 0.1-0.9)
|
|
286
|
-
*/
|
|
287
|
-
iris_layout.layout.update_split_ratio = (function iris_layout$layout$update_split_ratio(tree,split_id,new_ratio){
|
|
288
|
-
var update_node = (function iris_layout$layout$update_split_ratio_$_update_node(node){
|
|
289
|
-
if((node == null)){
|
|
290
|
-
return null;
|
|
291
|
-
} else {
|
|
292
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"tile","tile",758132866))){
|
|
293
|
-
return node;
|
|
294
|
-
} else {
|
|
295
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(iris_layout.layout.node_type(node),new cljs.core.Keyword(null,"split","split",-599435118))){
|
|
296
|
-
if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(node),split_id)){
|
|
297
|
-
return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"ratio","ratio",-926560044),(function (){var x__5090__auto__ = 0.9;
|
|
298
|
-
var y__5091__auto__ = (function (){var x__5087__auto__ = 0.1;
|
|
299
|
-
var y__5088__auto__ = new_ratio;
|
|
300
|
-
return ((x__5087__auto__ > y__5088__auto__) ? x__5087__auto__ : y__5088__auto__);
|
|
301
|
-
})();
|
|
302
|
-
return ((x__5090__auto__ < y__5091__auto__) ? x__5090__auto__ : y__5091__auto__);
|
|
303
|
-
})());
|
|
304
|
-
} else {
|
|
305
|
-
return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"children","children",-940561982),cljs.core.mapv.cljs$core$IFn$_invoke$arity$2(iris_layout$layout$update_split_ratio_$_update_node,new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node)));
|
|
306
|
-
}
|
|
307
|
-
} else {
|
|
308
|
-
return null;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
return update_node(tree);
|
|
314
|
-
});
|
|
315
|
-
/**
|
|
316
|
-
* Append an entity to an existing layout by wrapping in a horizontal split.
|
|
317
|
-
* If layout is nil, creates a single tile.
|
|
318
|
-
*/
|
|
319
|
-
iris_layout.layout.append_entity = (function iris_layout$layout$append_entity(layout,entity_id,tile_id,split_id){
|
|
320
|
-
var new_tile = iris_layout.layout.create_tile(tile_id,entity_id);
|
|
321
|
-
if((layout == null)){
|
|
322
|
-
return new_tile;
|
|
323
|
-
} else {
|
|
324
|
-
return iris_layout.layout.create_split(split_id,new cljs.core.Keyword(null,"horizontal","horizontal",2062109475),layout,new_tile,0.5);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
//# sourceMappingURL=iris_layout.layout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["iris_layout/layout.cljs"],"mappings":"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","names":["iris-layout.layout/node-type","node","cljs.core.keyword","iris-layout.layout/create-tile","id","entity-id","iris-layout.layout/create-split","direction","child1","child2","ratio","x__5090__auto__","y__5091__auto__","x__5087__auto__","y__5088__auto__","iris-layout.layout/find-tile","tree","tile-id","cljs.core._EQ_","or__5002__auto__","G__12195","G__12196","cljs.core/first","G__12197","G__12198","cljs.core/second","iris-layout.layout/replace-node","node-id","new-node","cljs.core.assoc","G__12199","G__12200","G__12201","G__12205","G__12206","G__12207","var_args","args__5732__auto__","len__5726__auto__","i__5727__auto__","argseq__5733__auto__","cljs.core/IndexedSeq","iris-layout.layout/split-tile","p__12224","vec__12225","cljs.core.nth","seq12213","G__12214","cljs.core/next","G__12215","G__12216","G__12217","G__12218","G__12219","self__5711__auto__","new-entity-id","new-tile-id","split-id","before?","existing-tile","vec__12228","new-tile","new-split","iris-layout.layout/get-parent-split","parent","find-parent","iris-layout.layout/merge-tile","vec__12236","sibling","iris-layout.layout/find-tile-by-entity","G__12243","G__12244","G__12246","G__12247","iris-layout.layout/remove-entity-from-layout","vec__12254","c1","c2","new-c1","remove-and-collapse","new-c2","iris-layout.layout/collect-entity-ids","cljs.core.into","cljs.core.mapcat","iris-layout.layout/update-split-ratio","new-ratio","cljs.core.mapv","update-node","iris-layout.layout/append-entity","layout"],"sourcesContent":["(ns iris-layout.layout)\n\n(defn node-type\n \"Get node type as keyword (handles both keyword and string values)\"\n [node]\n (keyword (:type node)))\n\n(defn create-tile\n \"Create a new tile node\"\n [id entity-id]\n {:type :tile\n :id id\n :entity-id entity-id})\n\n(defn create-split\n \"Create a new split node with direction, children, and ratio\"\n [id direction child1 child2 ratio]\n {:type :split\n :id id\n :direction direction\n :ratio (min 0.9 (max 0.1 ratio))\n :children [child1 child2]})\n\n(defn find-tile\n \"Walk tree to find tile by ID\"\n [tree tile-id]\n (cond\n (nil? tree) nil\n (= (node-type tree) :tile)\n (when (= (:id tree) tile-id) tree)\n\n (= (node-type tree) :split)\n (or (find-tile (first (:children tree)) tile-id)\n (find-tile (second (:children tree)) tile-id))))\n\n(defn replace-node\n \"Replace a node in the tree by ID with a new node\"\n [tree node-id new-node]\n (cond\n (nil? tree) nil\n\n (= (:id tree) node-id)\n new-node\n\n (= (node-type tree) :split)\n (assoc tree :children\n [(replace-node (first (:children tree)) node-id new-node)\n (replace-node (second (:children tree)) node-id new-node)])\n\n :else tree))\n\n(defn split-tile\n \"Insert a split at tile position with new entity.\n When before? is true, new tile goes first (left/top).\"\n [tree tile-id direction new-entity-id new-tile-id split-id & [before?]]\n (let [existing-tile (find-tile tree tile-id)]\n (when existing-tile\n (let [new-tile (create-tile new-tile-id new-entity-id)\n [child1 child2] (if before?\n [new-tile existing-tile]\n [existing-tile new-tile])\n new-split (create-split split-id direction child1 child2 0.5)]\n (replace-node tree tile-id new-split)))))\n\n(defn get-parent-split\n \"Find the parent split of a given node\"\n [tree node-id]\n (letfn [(find-parent [node parent]\n (cond\n (nil? node) nil\n\n (= (:id node) node-id) parent\n\n (= (node-type node) :split)\n (or (find-parent (first (:children node)) node)\n (find-parent (second (:children node)) node))))]\n (find-parent tree nil)))\n\n(defn merge-tile\n \"Remove a tile and collapse its parent split\"\n [tree tile-id]\n (let [parent (get-parent-split tree tile-id)]\n (if parent\n (let [[child1 child2] (:children parent)\n sibling (if (= (:id child1) tile-id) child2 child1)]\n (replace-node tree (:id parent) sibling))\n tree)))\n\n(defn find-tile-by-entity\n \"Find the tile node that contains a given entity-id\"\n [tree entity-id]\n (cond\n (nil? tree) nil\n (= (node-type tree) :tile)\n (when (= (:entity-id tree) entity-id) tree)\n\n (= (node-type tree) :split)\n (or (find-tile-by-entity (first (:children tree)) entity-id)\n (find-tile-by-entity (second (:children tree)) entity-id))))\n\n(defn remove-entity-from-layout\n \"Remove an entity from the layout tree and collapse empty splits.\n Returns nil if the entire tree becomes empty.\"\n [tree entity-id]\n (letfn [(remove-and-collapse [node]\n (cond\n (nil? node) nil\n\n (= (node-type node) :tile)\n (if (= (:entity-id node) entity-id)\n nil ;; Remove this tile\n node)\n\n (= (node-type node) :split)\n (let [[c1 c2] (:children node)\n new-c1 (remove-and-collapse c1)\n new-c2 (remove-and-collapse c2)]\n (cond\n (nil? new-c1) new-c2 ;; Collapse: return sibling\n (nil? new-c2) new-c1 ;; Collapse: return sibling\n :else (assoc node :children [new-c1 new-c2])))\n\n :else node))]\n (remove-and-collapse tree)))\n\n(defn collect-entity-ids\n \"Walk layout tree and return a vector of entity IDs (in order)\"\n [node]\n (cond\n (nil? node) []\n (= (node-type node) :tile) (if (:entity-id node) [(:entity-id node)] [])\n (= (node-type node) :split) (into [] (mapcat collect-entity-ids (:children node)))\n :else []))\n\n(defn update-split-ratio\n \"Update the ratio of a split (clamped 0.1-0.9)\"\n [tree split-id new-ratio]\n (letfn [(update-node [node]\n (cond\n (nil? node) nil\n\n (= (node-type node) :tile) node\n\n (= (node-type node) :split)\n (if (= (:id node) split-id)\n (assoc node :ratio (min 0.9 (max 0.1 new-ratio)))\n (assoc node :children\n (mapv update-node (:children node))))))]\n (update-node tree)))\n\n(defn append-entity\n \"Append an entity to an existing layout by wrapping in a horizontal split.\n If layout is nil, creates a single tile.\"\n [layout entity-id tile-id split-id]\n (let [new-tile (create-tile tile-id entity-id)]\n (if (nil? layout)\n new-tile\n (create-split split-id :horizontal layout new-tile 0.5))))\n"]}
|