@panphora/bevel 0.1.0 → 0.1.1

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/bevel.css CHANGED
@@ -2295,8 +2295,8 @@
2295
2295
  color: var(--bevel-ink); position: relative; z-index: 1;
2296
2296
  }
2297
2297
  .bevel-seg > .bevel-button[aria-pressed="true"] .bevel-button__label { translate: 1px 1px; }
2298
- .bevel-seg--links { gap: 0; }
2299
- .bevel-seg--links > .bevel-button { padding: 5px 13px; color: var(--bevel-muted); }
2298
+ .bevel-seg--links { gap: 0; flex-wrap: wrap; max-width: 100%; padding-left: 2px; }
2299
+ .bevel-seg--links > .bevel-button { padding: 5px 13px; margin-left: -2px; color: var(--bevel-muted); }
2300
2300
  .bevel-seg--links > .bevel-button:hover { background: var(--bevel-face); color: var(--bevel-ink); }
2301
2301
  .bevel-seg--links > .bevel-button[aria-current="page"] {
2302
2302
  background: var(--bevel-face-in);
package/bevel.js CHANGED
@@ -715,7 +715,15 @@
715
715
  sessions.set(root, { ...(sessions.get(root) || {}), trigger, openOrder: ++overlaySequence });
716
716
  if (trigger) trigger.setAttribute("aria-expanded", "true");
717
717
  setExpanded(root, true);
718
- if (!root.matches(".bevel-combobox__listbox")) requestAnimationFrame(() => (root.querySelector("[autofocus]") || focusable(root))?.focus());
718
+ if (!root.matches(".bevel-combobox__listbox") && (source !== "external" || !document.activeElement || document.activeElement === document.body)) {
719
+ let interrupted = false;
720
+ const interrupt = () => { interrupted = true; };
721
+ document.addEventListener("keydown", interrupt, true); document.addEventListener("pointerdown", interrupt, true);
722
+ requestAnimationFrame(() => {
723
+ document.removeEventListener("keydown", interrupt, true); document.removeEventListener("pointerdown", interrupt, true);
724
+ if (!interrupted) (root.querySelector("[autofocus]") || focusable(root))?.focus();
725
+ });
726
+ }
719
727
  };
720
728
  return transition(root, "open", root.id, false, true, commit, source);
721
729
  };
@@ -1850,13 +1858,13 @@
1850
1858
  if(target&&target!==card){session.target=target;const rect=target.getBoundingClientRect();session.before=current.clientY<rect.top+rect.height/2;target.dataset.bevelDropTarget=session.before?'before':'after';}
1851
1859
  };
1852
1860
  const stop=commit=>{
1853
- if(!sessions.has(card))return;document.removeEventListener('pointermove',move);document.removeEventListener('pointerup',up);document.removeEventListener('pointercancel',cancel);document.removeEventListener('lostpointercapture',cancel);document.removeEventListener('keydown',escape,true);sessions.delete(card);card.removeAttribute('data-bevel-dragging');
1861
+ if(!sessions.has(card))return;document.removeEventListener('pointermove',move);document.removeEventListener('pointerup',up);document.removeEventListener('pointercancel',cancel);document.removeEventListener('lostpointercapture',cancel);document.removeEventListener('keydown',escape,true);document.removeEventListener('dragstart',native,true);sessions.delete(card);card.removeAttribute('data-bevel-dragging');
1854
1862
  const {list,target,before}=session;clear();if(!commit||!session.active||!list||!root.isConnected||!card.isConnected||target&&!target.isConnected)return;
1855
1863
  const siblings=[...list.children].filter(node=>node.matches('.bevel-kanban__card')&&node!==card),index=target?siblings.indexOf(target)+(before?0:1):siblings.length;
1856
1864
  kanbanMove(root,card,list,index);
1857
1865
  };
1858
- const up=current=>{if(current.pointerId===pointerId)stop(true);},cancel=current=>{if(current.pointerId===pointerId)stop(false);},escape=current=>{if(current.key==='Escape'){current.preventDefault();stop(false);}};
1859
- sessions.set(card,session);document.addEventListener('pointermove',move);document.addEventListener('pointerup',up);document.addEventListener('pointercancel',cancel);document.addEventListener('lostpointercapture',cancel);document.addEventListener('keydown',escape,true);
1866
+ const native=current=>current.preventDefault(),up=current=>{if(current.pointerId===pointerId)stop(true);},cancel=current=>{if(current.pointerId===pointerId)stop(false);},escape=current=>{if(current.key==='Escape'){current.preventDefault();stop(false);}};
1867
+ sessions.set(card,session);document.addEventListener('pointermove',move);document.addEventListener('pointerup',up);document.addEventListener('pointercancel',cancel);document.addEventListener('lostpointercapture',cancel);document.addEventListener('keydown',escape,true);document.addEventListener('dragstart',native,true);
1860
1868
  });
1861
1869
 
1862
1870
  const cancelGridEdit = (cell, focus = true) => { const session=sessions.get(cell); if(!session)return; session.editor.remove(); cell.removeAttribute("data-bevel-editing"); cell.removeAttribute("data-bevel-invalid"); sessions.delete(cell); const error=cell.querySelector(".bevel-grid__cell-error");if(error)error.hidden=true;if (focus && session.button?.isConnected) session.button.focus(); };
@@ -5732,11 +5732,11 @@ ol.bevel-r-list--small:where([data-bevel-appearance="bevel"]) > li::before { fon
5732
5732
 
5733
5733
 
5734
5734
 
5735
- .bevel-r-seg--links:where([data-bevel-appearance="bevel"]) { gap: 0; }
5735
+ .bevel-r-seg--links:where([data-bevel-appearance="bevel"]) { gap: 0; flex-wrap: wrap; max-width: 100%; padding-left: 2px; }
5736
5736
 
5737
5737
 
5738
5738
 
5739
- .bevel-r-seg--links > .bevel-r-button:where([data-bevel-appearance="bevel"]) { padding: 5px 13px; color: var(--bevel-muted); }
5739
+ .bevel-r-seg--links > .bevel-r-button:where([data-bevel-appearance="bevel"]) { padding: 5px 13px; margin-left: -2px; color: var(--bevel-muted); }
5740
5740
 
5741
5741
 
5742
5742
 
@@ -41,12 +41,12 @@
41
41
  }
42
42
  if (id === "blockMenu") {
43
43
  const option = item.def.options.find(option => option.isActive?.(record.editor));
44
- const markup = (option?.icon || icons.blockMenu) + menuCaret;
44
+ const optionIcons = [icons.paragraph, icons.h1, icons.h2, icons.h3, icons.quote, icons.code];
45
+ const markup = (optionIcons[item.def.options.indexOf(option)] || icons.blockMenu) + menuCaret;
45
46
  if (face.dataset.blockValue !== (option?.value || "P")) {
46
47
  face.innerHTML = markup;
47
48
  face.dataset.blockValue = option?.value || "P";
48
49
  }
49
- const optionIcons = [icons.paragraph, icons.h1, icons.h2, icons.h3, icons.quote, icons.code];
50
50
  for (const [index, markup] of optionIcons.entries()) {
51
51
  const button = item.menu?.querySelector(`[data-richclay-option-index="${index}"]`);
52
52
  if (!button || button.hasAttribute("data-bevel-richclay-icon")) continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panphora/bevel",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Beveled controls in an editorial page. One stylesheet, one script, no build.",
5
5
  "license": "MIT-0",
6
6
  "author": "David Miranda",
@@ -458,7 +458,7 @@
458
458
  "correction:c1": "node tests/correction-c1.mjs",
459
459
  "correction:c2": "node tests/correction-c2.mjs",
460
460
  "correction:c2:overlays": "node tests/correction-c2-modal-drawer.mjs",
461
- "test": "npm run test:build && npm run test:showcase && npm run check && npm run contrast && npm run roundtrip && npm run functional && npm run datastar && npm run correction:c1 && npm run datastar:native && npm run clay:snapshot && npm run datastar:pickers && npm run correction:c2:overlays && npm run correction:c2:pickers && npm run correction:c2:forms && npm run correction:c2:wizard && npm run datastar:lifecycle && npm run datastar:reload && npm run richclay:integration && npm run inline-edit:integration && npm run quickcrop:integration && npm run packaged:peers && npm run upload:integration && npm run correction:c3:navigation && npm run correction:app-shell && npm run file-tree && npm run correction:c3:code-diff && npm run correction:c3:feedback && npm run correction:c3:split && npm run correction:c3:navigation-controls && npm run correction:c3:display && npm run correction:c3:rich-toolbar && npm run correction:c3:grid && npm run correction:c3:kanban && npm run context:hypercms && npm run context:quickcrop && npm run datastar:active && npm run datastar:board && npm run datastar:upload && npm run datastar:grid && npm run datastar:state-reload && npm run acceptance:layout && npm run final-review:regressions",
461
+ "test": "node scripts/test-guard.mjs && npm run test:build && npm run test:showcase && npm run check && npm run contrast && npm run roundtrip && npm run functional && npm run datastar && npm run correction:c1 && npm run datastar:native && npm run clay:snapshot && npm run datastar:pickers && npm run correction:c2:overlays && npm run correction:c2:pickers && npm run correction:c2:forms && npm run correction:c2:wizard && npm run datastar:lifecycle && npm run datastar:reload && npm run richclay:integration && npm run inline-edit:integration && npm run quickcrop:integration && npm run packaged:peers && npm run upload:integration && npm run correction:c3:navigation && npm run correction:app-shell && npm run file-tree && npm run correction:c3:code-diff && npm run correction:c3:feedback && npm run correction:c3:split && npm run correction:c3:navigation-controls && npm run correction:c3:display && npm run correction:c3:rich-toolbar && npm run correction:c3:grid && npm run correction:c3:kanban && npm run context:hypercms && npm run context:quickcrop && npm run datastar:active && npm run datastar:board && npm run datastar:upload && npm run datastar:grid && npm run datastar:state-reload && npm run acceptance:layout && npm run final-review:regressions",
462
462
  "dev": "node scripts/dev.mjs",
463
463
  "datastar:native": "node tests/datastar-native.mjs",
464
464
  "correction:c2:pickers": "node tests/correction-c2-pickers.mjs",
@@ -517,7 +517,8 @@
517
517
  "file-tree:bench": "node tests/react/file-tree-bench.mjs",
518
518
  "vendor:richclay": "node scripts/vendor-richclay-fixture.mjs ../richclay",
519
519
  "vendor:quickcrop": "node scripts/vendor-quickcrop-fixture.mjs ../quickcrop",
520
- "vendor:hypercms": "node scripts/vendor-hypercms-fixture.mjs ../hypercms ../clayjs"
520
+ "vendor:hypercms": "node scripts/vendor-hypercms-fixture.mjs ../hypercms ../clayjs",
521
+ "prepublishOnly": "testbox run"
521
522
  },
522
523
  "devDependencies": {
523
524
  "@floating-ui/core": "1.8.0",