@design.estate/dees-catalog 12.2.0 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist_bundle/bundle.js +120 -18
  2. package/dist_bundle/bundle.js.map +1 -1
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/00group-appui/dees-appui-mainmenu/dees-appui-mainmenu.d.ts +5 -0
  5. package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +18 -0
  6. package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +10 -1
  7. package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +103 -5
  8. package/dist_ts_web/elements/00group-form/dees-form/dees-form.d.ts +2 -1
  9. package/dist_ts_web/elements/00group-form/dees-form/dees-form.js +2 -1
  10. package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.d.ts +12 -2
  11. package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.js +11 -1
  12. package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +7 -2
  13. package/dist_ts_web/elements/00group-workspace/dees-workspace/dees-workspace.js +3 -3
  14. package/dist_ts_web/elements/00group-workspace/dees-workspace/styles.js +10 -2
  15. package/package.json +1 -1
  16. package/readme.md +27 -1
  17. package/ts_web/00_commitinfo_data.ts +1 -1
  18. package/ts_web/elements/00group-appui/dees-appui-mainmenu/dees-appui-mainmenu.ts +6 -0
  19. package/ts_web/elements/00group-button/dees-button/dees-button.demo.ts +10 -0
  20. package/ts_web/elements/00group-button/dees-button/dees-button.ts +96 -3
  21. package/ts_web/elements/00group-form/dees-form/dees-form.ts +2 -1
  22. package/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts +11 -1
  23. package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +6 -1
  24. package/ts_web/elements/00group-workspace/dees-workspace/dees-workspace.ts +2 -2
  25. package/ts_web/elements/00group-workspace/dees-workspace/styles.ts +9 -1
@@ -62897,13 +62897,18 @@ var init_workspace = __esm({
62897
62897
  });
62898
62898
 
62899
62899
  // ts_web/elements/00group-button/dees-button/dees-button.demo.ts
62900
- var clicked, demoFunc3;
62900
+ var clicked, toggled, demoFunc3;
62901
62901
  var init_dees_button_demo = __esm({
62902
62902
  "ts_web/elements/00group-button/dees-button/dees-button.demo.ts"() {
62903
62903
  init_dist_ts26();
62904
62904
  init_templates();
62905
62905
  init_workspace();
62906
62906
  clicked = /* @__PURE__ */ __name((event) => showDemoResult(event.currentTarget, `${event.target.text || "Button"} selected.`), "clicked");
62907
+ toggled = /* @__PURE__ */ __name((event) => {
62908
+ const button = event.target;
62909
+ button.pressed = !button.pressed;
62910
+ showDemoResult(button, `${button.text}: ${button.pressed ? "on" : "off"}`);
62911
+ }, "toggled");
62907
62912
  demoFunc3 = /* @__PURE__ */ __name(() => demoPage("Button", "A shared shape and rhythm for actions, with a clear hierarchy of intent.", b2`
62908
62913
  ${demoSection("Intent", "Accent marks the primary action. Quieter treatments keep supporting actions available.", b2`
62909
62914
  <div class="dees-demo-row" @clicked=${clicked}>${["default", "accent", "secondary", "destructive", "outline", "ghost", "link"].map((type5) => b2`<dees-button .type=${type5} .text=${type5}></dees-button>`)}</div>
@@ -62917,6 +62922,9 @@ var init_dees_button_demo = __esm({
62917
62922
  ${demoOutput()}${demoCode('<dees-button size="icon" text="Settings" icon="lucide:settings"></dees-button>')}`)}
62918
62923
  ${demoSection("Status", "Pending, success, and error faces are inert. Disabled actions stay visible.", b2`
62919
62924
  <div class="dees-demo-row">${["normal", "pending", "success", "error"].map((status) => b2`<dees-button .status=${status} .text=${status}></dees-button>`)}<dees-button disabled text="Unavailable"></dees-button></div>`)}
62925
+ ${demoSection("Toggle", "Setting pressed makes a button a toggle and announces it as one. The on face layers over the type face and stays on when the pointer leaves. A button without pressed stays a plain action.", b2`
62926
+ <div class="dees-demo-row" @clicked=${toggled}><dees-button type="ghost" size="icon" icon="lucide:terminal" text="DevTools" .pressed=${true}></dees-button><dees-button type="ghost" icon="lucide:panel-left" text="Sidebar" .pressed=${false}></dees-button><dees-button type="outline" text="Wrap lines" .pressed=${true}></dees-button><dees-button text="Live preview" .pressed=${false}></dees-button><dees-button type="accent" text="Recording" .pressed=${true}></dees-button></div>
62927
+ ${demoOutput()}${demoCode('<dees-button size="icon" icon="lucide:terminal" text="DevTools" .pressed=${this.devtoolsOpen} @clicked=${() => this.devtoolsOpen = !this.devtoolsOpen}></dees-button>')}`)}
62920
62928
  ${demoSection("Event data", "Activation uses the clicked event for pointer and keyboard input.", b2`
62921
62929
  <div class="dees-demo-row"><dees-button text="Inspect event" .eventDetailData=${"workspace-preview"} @clicked=${(event) => showDemoResult(event.currentTarget, event.detail)}></dees-button></div>${demoOutput()}`)}
62922
62930
  ${demoSection("In a form", "The same button proportions carry through to form submission.", workspaceForm())}
@@ -62927,7 +62935,7 @@ var init_dees_button_demo = __esm({
62927
62935
  });
62928
62936
 
62929
62937
  // ts_web/elements/00group-button/dees-button/dees-button.ts
62930
- var _adoptedIconPosition_dec, _adoptedIcon_dec, _adoptedText_dec, _iconPosition_dec, _icon_dec, _fullWidth_dec, _insideForm_dec, _shape_dec, _status_dec, _size_dec2, _type_dec, _isHidden_dec, _disabled_dec, _eventDetailData_dec, _text_dec, _a3, _DeesButton_decorators, _init3, _text, _eventDetailData, _disabled, _isHidden, _type, _size2, _status, _shape, _insideForm, _fullWidth, _icon, _iconPosition, _adoptedText, _adoptedIcon, _adoptedIconPosition, _DeesButton, DeesButton;
62938
+ var _adoptedIconPosition_dec, _adoptedIcon_dec, _adoptedText_dec, _iconPosition_dec, _icon_dec, _fullWidth_dec, _insideForm_dec, _shape_dec, _pressed_dec, _status_dec, _size_dec2, _type_dec, _isHidden_dec, _disabled_dec, _eventDetailData_dec, _text_dec, _a3, _DeesButton_decorators, _init3, _text, _eventDetailData, _disabled, _isHidden, _type, _size2, _status, _pressed, _shape, _insideForm, _fullWidth, _icon, _iconPosition, _adoptedText, _adoptedIcon, _adoptedIconPosition, _DeesButton, DeesButton;
62931
62939
  var init_dees_button = __esm({
62932
62940
  "ts_web/elements/00group-button/dees-button/dees-button.ts"() {
62933
62941
  init_dist_ts26();
@@ -62951,6 +62959,9 @@ var init_dees_button = __esm({
62951
62959
  type: String
62952
62960
  })], _status_dec = [n5({
62953
62961
  type: String
62962
+ })], _pressed_dec = [n5({
62963
+ type: Boolean,
62964
+ reflect: true
62954
62965
  })], _shape_dec = [n5({
62955
62966
  type: String
62956
62967
  })], _insideForm_dec = [n5({
@@ -62966,14 +62977,15 @@ var init_dees_button = __esm({
62966
62977
  __privateAdd(this, _type, __runInitializers(_init3, 24, this, "default")), __runInitializers(_init3, 27, this);
62967
62978
  __privateAdd(this, _size2, __runInitializers(_init3, 28, this, "default")), __runInitializers(_init3, 31, this);
62968
62979
  __privateAdd(this, _status, __runInitializers(_init3, 32, this, "normal")), __runInitializers(_init3, 35, this);
62969
- __privateAdd(this, _shape, __runInitializers(_init3, 36, this, "squircle")), __runInitializers(_init3, 39, this);
62970
- __privateAdd(this, _insideForm, __runInitializers(_init3, 40, this, false)), __runInitializers(_init3, 43, this);
62971
- __privateAdd(this, _fullWidth, __runInitializers(_init3, 44, this, false)), __runInitializers(_init3, 47, this);
62972
- __privateAdd(this, _icon, __runInitializers(_init3, 48, this)), __runInitializers(_init3, 51, this);
62973
- __privateAdd(this, _iconPosition, __runInitializers(_init3, 52, this, "left")), __runInitializers(_init3, 55, this);
62974
- __privateAdd(this, _adoptedText, __runInitializers(_init3, 56, this, "")), __runInitializers(_init3, 59, this);
62975
- __privateAdd(this, _adoptedIcon, __runInitializers(_init3, 60, this, "")), __runInitializers(_init3, 63, this);
62976
- __privateAdd(this, _adoptedIconPosition, __runInitializers(_init3, 64, this, "left")), __runInitializers(_init3, 67, this);
62980
+ __privateAdd(this, _pressed, __runInitializers(_init3, 36, this)), __runInitializers(_init3, 39, this);
62981
+ __privateAdd(this, _shape, __runInitializers(_init3, 40, this, "squircle")), __runInitializers(_init3, 43, this);
62982
+ __privateAdd(this, _insideForm, __runInitializers(_init3, 44, this, false)), __runInitializers(_init3, 47, this);
62983
+ __privateAdd(this, _fullWidth, __runInitializers(_init3, 48, this, false)), __runInitializers(_init3, 51, this);
62984
+ __privateAdd(this, _icon, __runInitializers(_init3, 52, this)), __runInitializers(_init3, 55, this);
62985
+ __privateAdd(this, _iconPosition, __runInitializers(_init3, 56, this, "left")), __runInitializers(_init3, 59, this);
62986
+ __privateAdd(this, _adoptedText, __runInitializers(_init3, 60, this, "")), __runInitializers(_init3, 63, this);
62987
+ __privateAdd(this, _adoptedIcon, __runInitializers(_init3, 64, this, "")), __runInitializers(_init3, 67, this);
62988
+ __privateAdd(this, _adoptedIconPosition, __runInitializers(_init3, 68, this, "left")), __runInitializers(_init3, 71, this);
62977
62989
  __publicField(this, "lightDomObserver");
62978
62990
  __publicField(this, "handleKeydown", /* @__PURE__ */ __name((eventArg) => {
62979
62991
  if (eventArg.key === " " || eventArg.key === "Spacebar") {
@@ -63076,12 +63088,13 @@ var init_dees_button = __esm({
63076
63088
  return b2`
63077
63089
  <div
63078
63090
  part="button"
63079
- class="button ${this.isHidden ? "hidden" : ""} ${actualType} size-${actualSize} shape-${this.shape} ${this.status} ${this.disabled ? "disabled" : ""}"
63091
+ class="button ${this.isHidden ? "hidden" : ""} ${actualType} size-${actualSize} shape-${this.shape} ${this.status} ${this.pressed ? "pressed" : ""} ${this.disabled ? "disabled" : ""}"
63080
63092
  role="button"
63081
63093
  tabindex=${this.disabled ? -1 : 0}
63082
63094
  aria-disabled=${this.disabled ? "true" : "false"}
63083
63095
  aria-busy=${this.status === "pending" ? "true" : "false"}
63084
63096
  .ariaLabel=${showText ? null : effectiveText || null}
63097
+ .ariaPressed=${this.pressed === void 0 ? null : String(this.pressed)}
63085
63098
  @click="${this.dispatchClick}"
63086
63099
  @keydown=${this.handleKeydown}
63087
63100
  @keyup=${this.handleKeyup}
@@ -63165,6 +63178,7 @@ var init_dees_button = __esm({
63165
63178
  _type = new WeakMap();
63166
63179
  _size2 = new WeakMap();
63167
63180
  _status = new WeakMap();
63181
+ _pressed = new WeakMap();
63168
63182
  _shape = new WeakMap();
63169
63183
  _insideForm = new WeakMap();
63170
63184
  _fullWidth = new WeakMap();
@@ -63180,6 +63194,7 @@ var init_dees_button = __esm({
63180
63194
  __decorateElement(_init3, 4, "type", _type_dec, _DeesButton, _type);
63181
63195
  __decorateElement(_init3, 4, "size", _size_dec2, _DeesButton, _size2);
63182
63196
  __decorateElement(_init3, 4, "status", _status_dec, _DeesButton, _status);
63197
+ __decorateElement(_init3, 4, "pressed", _pressed_dec, _DeesButton, _pressed);
63183
63198
  __decorateElement(_init3, 4, "shape", _shape_dec, _DeesButton, _shape);
63184
63199
  __decorateElement(_init3, 4, "insideForm", _insideForm_dec, _DeesButton, _insideForm);
63185
63200
  __decorateElement(_init3, 4, "fullWidth", _fullWidth_dec, _DeesButton, _fullWidth);
@@ -63207,6 +63222,12 @@ var init_dees_button = __esm({
63207
63222
  --button-success-fg: var(--dees-color-text-success);
63208
63223
  --button-error-bg: color-mix(in srgb, var(--dees-color-accent-error) 20%, transparent);
63209
63224
  --button-error-fg: var(--dees-color-text-error);
63225
+ /* toggle-on face: the shared selected-surface wash, an accent ring and the accent
63226
+ label colour. All three inputs are theme-aware tokens, so this face needs no
63227
+ bright/dark split of its own. */
63228
+ --button-pressed-wash: var(--dees-color-nav-selected);
63229
+ --button-pressed-ring: color-mix(in srgb, var(--dees-color-accent-primary) 50%, transparent);
63230
+ --button-pressed-fg: var(--dees-color-link);
63210
63231
  }
63211
63232
  :host([gobright]) {
63212
63233
  --button-pending-bg: var(--dees-color-accent-primary);
@@ -63226,11 +63247,15 @@ var init_dees_button = __esm({
63226
63247
  }
63227
63248
 
63228
63249
  /* A full-width button is sized by its container, so its label has to yield rather
63229
- than spill out of the face when the container is narrower than the text. */
63250
+ than spill out of the face when the container is narrower than the text. It clips with
63251
+ a 1px margin rather than hiding: a button face is no scroll container, and the
63252
+ toggle-on overlay sits 1px outside the padding box so that its ring lands on the
63253
+ type's own border edge — overflow: hidden would cut exactly that pixel away. */
63230
63254
  :host([full-width]) .button {
63231
63255
  width: 100%;
63232
63256
  min-width: 0;
63233
- overflow: hidden;
63257
+ overflow: clip;
63258
+ overflow-clip-margin: 1px;
63234
63259
  }
63235
63260
 
63236
63261
  :host([full-width]) .textbox {
@@ -63434,6 +63459,59 @@ var init_dees_button = __esm({
63434
63459
  text-decoration-color: currentColor;
63435
63460
  }
63436
63461
 
63462
+ /* Toggle-on face (the pressed property).
63463
+ A toggle has to stay visibly on once the pointer leaves it, so this cannot be the
63464
+ hover face; it layers on top of whatever the type paints instead of replacing it. The
63465
+ wash rides on an overlay rather than on the face's own background, because every
63466
+ type, hover and active rule sets the background shorthand and would reset a layer
63467
+ declared on the face itself. isolation scopes the overlay's negative layer to this
63468
+ face, which paints it above the type's background and below the label and icon. */
63469
+ .button.pressed {
63470
+ isolation: isolate;
63471
+ }
63472
+
63473
+ .button.pressed::after {
63474
+ content: '';
63475
+ position: absolute;
63476
+ /* the face's border box, so the ring lands on the type's own border edge */
63477
+ inset: -1px;
63478
+ z-index: -1;
63479
+ border-radius: inherit;
63480
+ corner-shape: inherit;
63481
+ background: var(--button-pressed-wash);
63482
+ box-shadow: inset 0 0 0 1px var(--button-pressed-ring);
63483
+ pointer-events: none;
63484
+ }
63485
+
63486
+ /* A filled face already carries the accent as its surface, where an accent wash cannot
63487
+ read, so it recesses behind a scrim with a light inner ring instead. Both faces are
63488
+ dark in either theme, which is why these two values do not follow the theme. */
63489
+ .button.accent,
63490
+ .button.destructive {
63491
+ --button-pressed-wash: color-mix(in srgb, black 24%, transparent);
63492
+ --button-pressed-ring: color-mix(in srgb, white 40%, transparent);
63493
+ }
63494
+
63495
+ /* At size="icon" there is no label, so the foreground carries the state as well. Filled
63496
+ faces keep their on-accent label, and a status face keeps its own. */
63497
+ .button.pressed:not(.accent):not(.destructive):not(.pending):not(.success):not(.error) {
63498
+ color: var(--button-pressed-fg);
63499
+ }
63500
+
63501
+ /* A status face owns the whole surface for as long as it shows, and type="link" has no
63502
+ surface to wash at all (no border, no padding) — its on state is the hover underline
63503
+ made permanent. aria-pressed reports the state in every one of these cases. */
63504
+ .button.pressed.pending::after,
63505
+ .button.pressed.success::after,
63506
+ .button.pressed.error::after,
63507
+ .button.pressed.link::after {
63508
+ content: none;
63509
+ }
63510
+
63511
+ .button.pressed.link {
63512
+ text-decoration-color: currentColor;
63513
+ }
63514
+
63437
63515
  /* Status states */
63438
63516
  .button.pending,
63439
63517
  .button.success,
@@ -156913,6 +156991,16 @@ var _DeesInputWysiwyg = class _DeesInputWysiwyg extends (_a55 = DeesInputBase, _
156913
156991
  __publicField(this, "blockOperations");
156914
156992
  __publicField(this, "inputHandler");
156915
156993
  __publicField(this, "keyboardHandler");
156994
+ /**
156995
+ * Block drag and drop, public alongside `blockOperations` because the drag *interaction* has
156996
+ * no other seam: `dragState`, the drop indicator and the global drag-over listener all live in
156997
+ * this handler, and a native HTML5 drag sequence cannot be synthesised from script, so a host
156998
+ * or a test that exercises dragging has to drive `handleDragStart` / `handleDragEnd` itself.
156999
+ * Reordering a block programmatically needs none of that: `blockOperations.moveBlock(blockId,
157000
+ * targetIndex)` is the public path for that, on the public `blocks` accessor. The remaining
157001
+ * handlers stay private because everything they own is reachable through ordinary input and
157002
+ * keyboard events.
157003
+ */
156916
157004
  __publicField(this, "dragDropHandler");
156917
157005
  __publicField(this, "history");
156918
157006
  __publicField(this, "blurTimeout", null);
@@ -158491,6 +158579,7 @@ var _DeesForm = class _DeesForm extends (_a58 = DeesElement, _horizontalLayout_d
158491
158579
  constructor() {
158492
158580
  super(...arguments);
158493
158581
  __publicField(this, "name", "myform");
158582
+ /** emits the collected form data on every child change; the only producer is `collectFormData()` */
158494
158583
  __publicField(this, "changeSubject", new domtools_pluginexports_exports.smartrx.rxjs.Subject());
158495
158584
  __publicField(this, "readyDeferred", domtools_pluginexports_exports.smartpromise.defer());
158496
158585
  __privateAdd(this, _horizontalLayout, __runInitializers(_init59, 8, this, false)), __runInitializers(_init59, 11, this);
@@ -218090,7 +218179,12 @@ __publicField(_DeesSimpleAppDash, "styles", [themeDefaultStyles, cssManager.defa
218090
218179
  .controlbar { grid-column: 1 / -1; display: flex; align-items: center; justify-content: flex-end; border-top: 1px solid var(--dees-color-border-subtle); background: var(--dees-color-bg-secondary); font-size: 11px; color: var(--dees-color-text-secondary); }
218091
218180
  .control { display: flex; align-items: center; gap: 6px; padding: 0 12px; height: 100%; }
218092
218181
  .status-terminal { border-left: 1px solid var(--dees-color-border-subtle); }
218093
- .status-terminal[aria-pressed='true'] { color: var(--dees-color-accent-primary); background: var(--dees-color-nav-selected); }
218182
+ /* The on face is the catalog's toggle-on face: the shared selected surface plus the accent
218183
+ *text* colour, not --dees-color-accent-primary, which only reaches 3.6:1 as a label. The
218184
+ hovered rule exists because the shared button:hover rule below outranks a plain
218185
+ [aria-pressed] rule and would wash the on state away under the pointer. */
218186
+ .status-terminal[aria-pressed='true'] { color: var(--dees-color-link); background: var(--dees-color-nav-selected); }
218187
+ .status-terminal[aria-pressed='true']:hover { color: var(--dees-color-link); background: color-mix(in srgb, var(--dees-color-nav-selected) 88%, var(--dees-color-text-primary)); }
218094
218188
  .collapsed .sidebar-header { justify-content: center; padding: 0; }
218095
218189
  .collapsed .sidebar-header > dees-icon, .collapsed .appName, .collapsed .section-label, .collapsed .viewTab span, .collapsed .viewTab .chevron, .collapsed .action span { display: none; }
218096
218190
  .collapsed .collapseToggle { margin: 0; width: 40px; height: 38px; }
@@ -220534,7 +220628,15 @@ var workspaceStyles = i`
220534
220628
  .toolbar-actions, .panel-header-actions { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }
220535
220629
  .panel-action { width: 30px; height: 30px; display: grid; place-items: center; border-radius: var(--dees-radius-md); color: var(--dees-color-text-secondary); transition: color 140ms ease, background-color 140ms ease; }
220536
220630
  .panel-action:hover:not(:disabled) { color: var(--dees-color-text-primary); background: var(--dees-color-hover); }
220537
- .panel-action[aria-pressed=true] { color: var(--dees-color-link); background: var(--dees-color-hover); }
220631
+ /* A panel toggle announces one state, aria-expanded, and paints it with the shared selected
220632
+ surface — the same wash and accent label dees-button gives its pressed state. It cannot
220633
+ reuse the hover background: an expanded toggle would then be indistinguishable from a
220634
+ hovered collapsed one. Both on-state rules repeat the hover rule's :not(:disabled), which
220635
+ puts them at (0,4,0) and (0,5,0) against that rule's (0,3,0), so the on face outranks hover
220636
+ on specificity instead of on source order, and the hovered-expanded rule keeps it under the
220637
+ pointer. A disabled toggle falls back to the base face, the way it does for hover. */
220638
+ .panel-action.panel-toggle[aria-expanded='true']:not(:disabled) { color: var(--dees-color-link); background: var(--dees-color-nav-selected); }
220639
+ .panel-action.panel-toggle[aria-expanded='true']:not(:disabled):hover { color: var(--dees-color-link); background: color-mix(in srgb, var(--dees-color-nav-selected) 88%, var(--dees-color-text-primary)); }
220538
220640
  .workspace-container { display: flex; flex: 1; min-height: 0; min-width: 0; position: relative; }
220539
220641
  .editor-area { display: flex; flex-direction: column; flex: 1; min-width: 0; min-height: 0; overflow: hidden; }
220540
220642
  .filetree-panel { position: relative; flex-shrink: 0; min-width: 0; overflow: hidden; background: var(--dees-color-bg-secondary); }
@@ -223256,8 +223358,8 @@ var _DeesWorkspace = class _DeesWorkspace extends (_a142 = DeesElement, _executi
223256
223358
  <span class="save-state" role="status">${this.isInitializing ? "Starting\u2026" : this.initializationError ? "Connection failed" : !ready ? "Not connected" : modifiedCount ? `${modifiedCount} unsaved` : "All changes saved"}</span>
223257
223359
  <div class="toolbar-actions">
223258
223360
  <button class="panel-action" type="button" aria-label="Save all files" title="Save all files" ?disabled=${!ready || !modifiedCount} @click=${this.saveAllFiles}><dees-icon icon="lucide:Save" iconSize="16"></dees-icon></button>
223259
- ${this.showFileTree ? b2`<button class="panel-action" type="button" aria-label="Toggle files" aria-controls="workspace-files" aria-expanded=${!this.isFileTreeCollapsed} aria-pressed=${!this.isFileTreeCollapsed} title="Toggle files" @click=${() => this.isFileTreeCollapsed = !this.isFileTreeCollapsed}><dees-icon icon="lucide:PanelLeft" iconSize="16"></dees-icon></button>` : ""}
223260
- ${this.showTerminal ? b2`<button class="panel-action" type="button" aria-label="Toggle terminal" aria-controls="workspace-terminal" aria-expanded=${!this.isTerminalCollapsed} aria-pressed=${!this.isTerminalCollapsed} title="Toggle terminal" @click=${this.toggleTerminal}><dees-icon icon="lucide:PanelBottom" iconSize="16"></dees-icon></button>` : ""}
223361
+ ${this.showFileTree ? b2`<button class="panel-action panel-toggle" type="button" aria-label="Toggle files" aria-controls="workspace-files" aria-expanded=${!this.isFileTreeCollapsed} title="Toggle files" @click=${() => this.isFileTreeCollapsed = !this.isFileTreeCollapsed}><dees-icon icon="lucide:PanelLeft" iconSize="16"></dees-icon></button>` : ""}
223362
+ ${this.showTerminal ? b2`<button class="panel-action panel-toggle" type="button" aria-label="Toggle terminal" aria-controls="workspace-terminal" aria-expanded=${!this.isTerminalCollapsed} title="Toggle terminal" @click=${this.toggleTerminal}><dees-icon icon="lucide:PanelBottom" iconSize="16"></dees-icon></button>` : ""}
223261
223363
  <button class="panel-action" type="button" aria-label="Editor options" aria-haspopup="menu" title="Editor options" @click=${this.showEditorMenu}><dees-icon icon="lucide:Ellipsis" iconSize="16"></dees-icon></button>
223262
223364
  </div>
223263
223365
  </header>
@@ -224953,7 +225055,7 @@ init_group_runtime();
224953
225055
  // ts_web/00_commitinfo_data.ts
224954
225056
  var commitinfo = {
224955
225057
  name: "@design.estate/dees-catalog",
224956
- version: "12.2.0",
225058
+ version: "12.4.0",
224957
225059
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
224958
225060
  };
224959
225061