wimui 0.24.3 → 0.25.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.
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../../i18n/useWimTranslation.cjs"),r=require("../../layout/VisuallyHidden/VisuallyHidden.cjs"),i=require("../../../icon/more-horizontal.cjs"),a=require("../../media/Icon/Icon.cjs"),o=require("./kanban.module.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("classnames");c=e.__toESM(c,1);let l=require("react/jsx-runtime");var u=(0,s.forwardRef)(({columns:e,onMove:r,onCardMove:i,className:a,forceMobileUI:u=!1,children:f,asChild:p=!1,...h},_)=>{let{t:v}=n.useWimTranslation(`common`),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(null),[C,w]=(0,s.useState)(null),T=r||i,E=(e,t,n)=>{b({itemId:t,columnId:n}),e.dataTransfer.setData(`text/plain`,`${n}:${t}`),e.dataTransfer.effectAllowed=`move`},D=(e,t)=>{e.preventDefault(),S(t)},O=(e,t)=>{e.preventDefault(),S(null);let[n,r]=e.dataTransfer.getData(`text/plain`).split(`:`);T?.(r,n,t),b(null)},k=(e,t,n)=>{T?.(e,t,n),w(null)},A=s.default.useMemo(()=>{if(e)return e;let t=[];return s.default.Children.forEach(f,e=>{if(s.default.isValidElement(e)){let n=e.props;typeof n.id==`string`&&typeof n.title==`string`&&t.push({id:n.id,title:n.title,items:[]})}}),t},[f,e]),j=()=>f||(e?e.map(e=>(0,l.jsx)(g,{id:e.id,title:e.title,cardCount:e.items.length,children:e.items.map(e=>(0,l.jsx)(m,{id:e.id,children:e.content},e.id))},e.id)):null),M=p?t.Root:`div`;return(0,l.jsx)(d.Provider,{value:{draggedItem:y,dragOverColumn:x,setDragOverColumn:S,handleDragStart:E,handleDragOver:D,handleDrop:O,handleMobileMove:k,activeMobileMenu:C,setActiveMobileMenu:w,columns:A},children:(0,l.jsx)(M,{...h,ref:_,className:(0,c.default)(`wim-kanban`,o.default.root,u&&o.default.touch,a),role:`region`,"aria-label":v(`a11y.kanban_board`),tabIndex:0,children:(0,l.jsx)(t.Slottable,{children:j()})})})}),d=s.default.createContext(null),f=()=>{let e=s.default.useContext(d);if(!e)throw Error(`Kanban compound components must be used within Kanban`);return e},p=({id:e,title:t,cardCount:i,children:a,className:s})=>{let{dragOverColumn:u,handleDragOver:d,handleDrop:p,setDragOverColumn:m}=f(),{t:h}=n.useWimTranslation(`common`);return(0,l.jsxs)(`div`,{className:(0,c.default)(o.default.column,{[o.default.dragOver]:u===e},s),onDragOver:t=>d(t,e),onDrop:t=>p(t,e),onDragLeave:()=>m(null),children:[(0,l.jsxs)(`div`,{className:o.default.columnHeader,children:[(0,l.jsx)(`div`,{className:o.default.columnTitle,children:t}),i!==void 0&&(0,l.jsxs)(`div`,{className:o.default.columnCount,children:[(0,l.jsx)(`span`,{"aria-hidden":`true`,children:i}),(0,l.jsx)(r.VisuallyHidden,{children:h(`a11y.kanban_column_count`,{count:i})})]})]}),(0,l.jsx)(`div`,{className:o.default.columnBody,children:a})]})},m=({id:e,children:t,disabled:r,className:u})=>{let{t:d}=n.useWimTranslation(`common`),{draggedItem:p,handleDragStart:m,handleMobileMove:g,activeMobileMenu:_,setActiveMobileMenu:v,columns:y}=f(),b=s.default.useContext(h);return(0,l.jsxs)(`div`,{className:(0,c.default)(o.default.card,{[o.default.dragging]:p?.itemId===e,[o.default.disabled]:r},u),draggable:!r,onDragStart:t=>b&&m(t,e,b),children:[(0,l.jsx)(`div`,{className:o.default.cardContent,children:t}),(0,l.jsxs)(`div`,{className:o.default.cardMove,children:[(0,l.jsx)(`button`,{type:`button`,className:o.default.cardMoveBtn,onClick:()=>v(_===e?null:e),"aria-label":d(`a11y.move_card`),disabled:r,children:(0,l.jsx)(a.Icon,{component:i.default,size:`sm`})}),_===e&&(0,l.jsx)(`div`,{className:o.default.cardMoveMenu,role:`listbox`,"aria-label":d(`a11y.move_to_column`),children:y.filter(e=>e.id!==b).map(t=>(0,l.jsx)(`button`,{type:`button`,className:o.default.cardMoveOption,onClick:()=>b&&g(e,b,t.id),role:`option`,"aria-selected":!1,children:t.title},t.id))})]})]})},h=s.default.createContext(null),g=e=>(0,l.jsx)(h.Provider,{value:e.id,children:(0,l.jsx)(p,{...e})}),_=u;_.Column=g,_.Card=m,u.displayName=`Kanban`,_.displayName=`KanbanBoard`,p.displayName=`KanbanColumn`,m.displayName=`KanbanCard`,g.displayName=`KanbanColumnWrapper`,exports.Kanban=u,exports.KanbanBoard=_,exports.default=_,exports.KanbanCard=m,exports.KanbanColumn=p;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../../i18n/useWimTranslation.cjs"),r=require("../../layout/VisuallyHidden/VisuallyHidden.cjs"),i=require("../../../icon/more-horizontal.cjs"),a=require("../../media/Icon/Icon.cjs"),o=require("./kanban.module.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("classnames");c=e.__toESM(c,1);let l=require("react/jsx-runtime");var u=(0,s.forwardRef)(({columns:e,onMove:r,onCardMove:i,className:a,forceMobileUI:u=!1,children:f,asChild:p=!1,...h},_)=>{let{t:v}=n.useWimTranslation(`common`),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(null),[C,w]=(0,s.useState)(null),T=r||i,E=(e,t,n)=>{b({itemId:t,columnId:n}),e.dataTransfer.setData(`text/plain`,`${n}:${t}`),e.dataTransfer.effectAllowed=`move`},D=(e,t)=>{e.preventDefault(),S(t)},O=(e,t)=>{e.preventDefault(),S(null);let[n,r]=e.dataTransfer.getData(`text/plain`).split(`:`);T?.(r,n,t),b(null)},k=(e,t,n)=>{T?.(e,t,n),w(null)},A=s.default.useMemo(()=>{if(e)return e;let t=[];return s.default.Children.forEach(f,e=>{if(s.default.isValidElement(e)){let n=e.props;typeof n.id==`string`&&typeof n.title==`string`&&t.push({id:n.id,title:n.title,items:[]})}}),t},[f,e]),j=()=>f||(e?e.map(e=>(0,l.jsx)(g,{id:e.id,title:e.title,cardCount:e.items.length,children:e.items.map(e=>(0,l.jsx)(m,{id:e.id,children:e.content},e.id))},e.id)):null),M=p?t.Root:`div`;return(0,l.jsx)(d.Provider,{value:{draggedItem:y,dragOverColumn:x,setDragOverColumn:S,handleDragStart:E,handleDragOver:D,handleDrop:O,handleMobileMove:k,activeMobileMenu:C,setActiveMobileMenu:w,columns:A},children:(0,l.jsx)(M,{...h,ref:_,className:(0,c.default)(`wim-kanban`,o.default.root,u&&o.default.touch,a),role:`region`,"aria-label":v(`a11y.kanban_board`),tabIndex:0,children:(0,l.jsx)(t.Slottable,{children:j()})})})}),d=s.default.createContext(null),f=()=>{let e=s.default.useContext(d);if(!e)throw Error(`Kanban compound components must be used within Kanban`);return e},p=({id:e,title:t,cardCount:i,children:a,className:u})=>{let{dragOverColumn:d,handleDragOver:p,handleDrop:m,setDragOverColumn:h}=f(),{t:g}=n.useWimTranslation(`common`),_=s.default.useId();return(0,l.jsxs)(`div`,{className:(0,c.default)(o.default.column,{[o.default.dragOver]:d===e},u),role:`group`,"aria-labelledby":t?_:void 0,onDragOver:t=>p(t,e),onDrop:t=>m(t,e),onDragLeave:()=>h(null),children:[(0,l.jsxs)(`div`,{className:o.default.columnHeader,children:[(0,l.jsx)(`div`,{id:_,className:o.default.columnTitle,"aria-hidden":`true`,children:t}),i!==void 0&&(0,l.jsxs)(`div`,{className:o.default.columnCount,children:[(0,l.jsx)(`span`,{"aria-hidden":`true`,children:i}),(0,l.jsx)(r.VisuallyHidden,{children:g(`a11y.kanban_column_count`,{count:i})})]})]}),(0,l.jsx)(`div`,{className:o.default.columnBody,children:a})]})},m=({id:e,children:t,disabled:r,className:u})=>{let{t:d}=n.useWimTranslation(`common`),{draggedItem:p,handleDragStart:m,handleMobileMove:g,activeMobileMenu:_,setActiveMobileMenu:v,columns:y}=f(),b=s.default.useContext(h);return(0,l.jsxs)(`div`,{className:(0,c.default)(o.default.card,{[o.default.dragging]:p?.itemId===e,[o.default.disabled]:r},u),draggable:!r,onDragStart:t=>b&&m(t,e,b),children:[(0,l.jsx)(`div`,{className:o.default.cardContent,children:t}),(0,l.jsxs)(`div`,{className:o.default.cardMove,children:[(0,l.jsx)(`button`,{type:`button`,className:o.default.cardMoveBtn,onClick:()=>v(_===e?null:e),"aria-label":d(`a11y.move_card`),disabled:r,children:(0,l.jsx)(a.Icon,{component:i.default,size:`sm`})}),_===e&&(0,l.jsx)(`div`,{className:o.default.cardMoveMenu,role:`listbox`,"aria-label":d(`a11y.move_to_column`),children:y.filter(e=>e.id!==b).map(t=>(0,l.jsx)(`button`,{type:`button`,className:o.default.cardMoveOption,onClick:()=>b&&g(e,b,t.id),role:`option`,"aria-selected":!1,children:t.title},t.id))})]})]})},h=s.default.createContext(null),g=e=>(0,l.jsx)(h.Provider,{value:e.id,children:(0,l.jsx)(p,{...e})}),_=u;_.Column=g,_.Card=m,u.displayName=`Kanban`,_.displayName=`KanbanBoard`,p.displayName=`KanbanColumn`,m.displayName=`KanbanCard`,g.displayName=`KanbanColumnWrapper`,exports.Kanban=u,exports.KanbanBoard=_,exports.default=_,exports.KanbanCard=m,exports.KanbanColumn=p;
@@ -72,24 +72,28 @@ var p = c(({ columns: r, onMove: i, onCardMove: a, className: c, forceMobileUI:
72
72
  let e = s.useContext(m);
73
73
  if (!e) throw Error("Kanban compound components must be used within Kanban");
74
74
  return e;
75
- }, g = ({ id: e, title: t, cardCount: i, children: a, className: s }) => {
76
- let { dragOverColumn: c, handleDragOver: l, handleDrop: p, setDragOverColumn: m } = h(), { t: g } = n("common");
75
+ }, g = ({ id: e, title: t, cardCount: i, children: a, className: c }) => {
76
+ let { dragOverColumn: l, handleDragOver: p, handleDrop: m, setDragOverColumn: g } = h(), { t: _ } = n("common"), v = s.useId();
77
77
  return /* @__PURE__ */ f("div", {
78
- className: u(o.column, { [o.dragOver]: c === e }, s),
79
- onDragOver: (t) => l(t, e),
80
- onDrop: (t) => p(t, e),
81
- onDragLeave: () => m(null),
78
+ className: u(o.column, { [o.dragOver]: l === e }, c),
79
+ role: "group",
80
+ "aria-labelledby": t ? v : void 0,
81
+ onDragOver: (t) => p(t, e),
82
+ onDrop: (t) => m(t, e),
83
+ onDragLeave: () => g(null),
82
84
  children: [/* @__PURE__ */ f("div", {
83
85
  className: o.columnHeader,
84
86
  children: [/* @__PURE__ */ d("div", {
87
+ id: v,
85
88
  className: o.columnTitle,
89
+ "aria-hidden": "true",
86
90
  children: t
87
91
  }), i !== void 0 && /* @__PURE__ */ f("div", {
88
92
  className: o.columnCount,
89
93
  children: [/* @__PURE__ */ d("span", {
90
94
  "aria-hidden": "true",
91
95
  children: i
92
- }), /* @__PURE__ */ d(r, { children: g("a11y.kanban_column_count", { count: i }) })]
96
+ }), /* @__PURE__ */ d(r, { children: _("a11y.kanban_column_count", { count: i }) })]
93
97
  })]
94
98
  }), /* @__PURE__ */ d("div", {
95
99
  className: o.columnBody,
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("./footer.module.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("classnames");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=n.default.forwardRef(({className:e,children:n,bordered:a,fluid:o,background:s=`surface`,...c},l)=>(0,i.jsx)(`footer`,{ref:l,className:(0,r.default)(`wim-footer`,t.default.root,a&&t.default.bordered,s&&t.default[`bg-${s}`],e),"data-bordered":a,...c,children:(0,i.jsx)(`div`,{className:(0,r.default)(t.default.container,o&&t.default.fluid),children:n})}));a.displayName=`Footer`;var o=n.default.forwardRef(({className:e,children:n,title:a,...o},s)=>(0,i.jsxs)(`div`,{ref:s,className:(0,r.default)(t.default.section,e),...o,children:[a&&(0,i.jsx)(`p`,{className:t.default.sectionTitle,children:a}),(0,i.jsx)(`div`,{className:t.default.sectionContent,children:n})]}));o.displayName=`Footer.Section`;var s=n.default.forwardRef(({className:e,children:n,...a},o)=>(0,i.jsx)(`div`,{ref:o,className:(0,r.default)(t.default.bottom,e),...a,children:n}));s.displayName=`Footer.Bottom`;var c=Object.assign(a,{Section:o,Bottom:s});exports.Footer=c,exports.default=c,exports.FooterBottom=s,exports.FooterSection=o;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("./footer.module.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("classnames");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=n.default.forwardRef(({className:e,children:n,bordered:a,fluid:o,background:s=`surface`,...c},l)=>(0,i.jsx)(`footer`,{ref:l,className:(0,r.default)(`wim-footer`,t.default.root,a&&t.default.bordered,s&&t.default[`bg-${s}`],e),"data-bordered":a,...c,children:(0,i.jsx)(`div`,{className:(0,r.default)(t.default.container,o&&t.default.fluid),children:n})}));a.displayName=`Footer`;var o=n.default.forwardRef(({className:e,children:n,title:a,titleLevel:o,...s},c)=>{let l=o?`h${o}`:null;return(0,i.jsxs)(`div`,{ref:c,className:(0,r.default)(t.default.section,e),...s,children:[a&&(l?(0,i.jsx)(l,{className:t.default.sectionTitle,children:a}):(0,i.jsx)(`p`,{className:t.default.sectionTitle,children:a})),(0,i.jsx)(`div`,{className:t.default.sectionContent,children:n})]})});o.displayName=`Footer.Section`;var s=n.default.forwardRef(({className:e,children:n,...a},o)=>(0,i.jsx)(`div`,{ref:o,className:(0,r.default)(t.default.bottom,e),...a,children:n}));s.displayName=`Footer.Bottom`;var c=Object.assign(a,{Section:o,Bottom:s});exports.Footer=c,exports.default=c,exports.FooterBottom=s,exports.FooterSection=o;
@@ -7,8 +7,23 @@ export interface FooterProps extends React.ComponentPropsWithoutRef<"footer"> {
7
7
  /** Background color */
8
8
  background?: "surface" | "surface-variant" | "inverse";
9
9
  }
10
+ /** 見出しの段。`Dashboard` の `titleLevel` と同じ語彙に揃えてある(T211)。 */
11
+ export type FooterTitleLevel = 2 | 3 | 4 | 5 | 6;
10
12
  export interface FooterSectionProps extends React.ComponentPropsWithoutRef<"div"> {
11
13
  title?: string;
14
+ /**
15
+ * `title` を見出しとして描くときの段(T211)。渡さなければ見出しにならず `p` のまま。
16
+ *
17
+ * 既定を見出しにしてはいけない(T191 の実績)── かつて `h4` 固定だった頃、ページに
18
+ * `h1` / `h2` があると段が飛んで axe の `heading-order` が鳴った
19
+ * (`Probes/SaginomiyaPool` で実際に出た)。フッタの欄名は文書の見出しではない、
20
+ * というのがそのときの判断で、ここはそれを踏襲する。
21
+ *
22
+ * ただし「欄名を見出しとして辿らせたい」ページも実在するので、段を明示したときだけ
23
+ * 見出しになるようにしてある。`Alert` の `titleTag`(既定 `div`)と同じ形。段を
24
+ * 決めるのはページ側の構造を知っている呼び出し元の仕事。
25
+ */
26
+ titleLevel?: FooterTitleLevel;
12
27
  }
13
28
  export declare const FooterSection: React.ForwardRefExoticComponent<FooterSectionProps & React.RefAttributes<HTMLDivElement>>;
14
29
  export type FooterBottomProps = React.ComponentPropsWithoutRef<"div">;
@@ -15,18 +15,21 @@ var a = t.forwardRef(({ className: t, children: i, bordered: a, fluid: o, backgr
15
15
  })
16
16
  }));
17
17
  a.displayName = "Footer";
18
- var o = t.forwardRef(({ className: t, children: a, title: o, ...s }, c) => /* @__PURE__ */ i("div", {
19
- ref: c,
20
- className: n(e.section, t),
21
- ...s,
22
- children: [o && /* @__PURE__ */ r("p", {
23
- className: e.sectionTitle,
24
- children: o
25
- }), /* @__PURE__ */ r("div", {
26
- className: e.sectionContent,
27
- children: a
28
- })]
29
- }));
18
+ var o = t.forwardRef(({ className: t, children: a, title: o, titleLevel: s, ...c }, l) => {
19
+ let u = s ? `h${s}` : null;
20
+ return /* @__PURE__ */ i("div", {
21
+ ref: l,
22
+ className: n(e.section, t),
23
+ ...c,
24
+ children: [o && r(u || "p", {
25
+ className: e.sectionTitle,
26
+ children: o
27
+ }), /* @__PURE__ */ r("div", {
28
+ className: e.sectionContent,
29
+ children: a
30
+ })]
31
+ });
32
+ });
30
33
  o.displayName = "Footer.Section";
31
34
  var s = t.forwardRef(({ className: t, children: i, ...a }, o) => /* @__PURE__ */ r("div", {
32
35
  ref: o,
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../i18n/useWimTranslation.cjs"),n=require("../../overlay/Portal/Portal.cjs"),r=require("../../layout/Transition/Transition.cjs"),i=require("../../overlay/FocusTrap/FocusTrap.cjs"),a=require("../../../icon/search.cjs"),o=require("../../media/Icon/Icon.cjs"),s=require("../../_internal/BaseListItem/BaseListItem.cjs"),c=require("./command-palette.module.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("classnames");u=e.__toESM(u,1);let d=require("react/jsx-runtime");var f=(0,l.createContext)(void 0),p=()=>{let e=(0,l.useContext)(f);if(!e)throw Error(`CommandPalette sub-components must be used within a CommandPalette`);return e},m=({children:e,open:t,onOpenChange:n})=>{let[r,i]=(0,l.useState)(!1),[a,o]=(0,l.useState)(``),[s,c]=(0,l.useState)(0),[u,p]=(0,l.useState)(!1),m=(0,l.useRef)(0),h=t!==void 0,g=h?t:r,_=(0,l.useCallback)(e=>{h||i(e),n?.(e),e||(o(``),c(0))},[h,n]),v=(0,l.useCallback)(()=>{let e=m.current;return m.current+=1,e},[]),y=(0,l.useCallback)(()=>{--m.current},[]);m.current=0,(0,l.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key===`k`&&(e.preventDefault(),p(!0),_(!g)),e.key===`Escape`&&g&&_(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[g,_]);let b=l.default.useMemo(()=>({open:g,onOpenChange:_,search:a,setSearch:o,activeIndex:s,setActiveIndex:c,registerItem:v,unregisterItem:y,isKeyboardNavigating:u,setIsKeyboardNavigating:p}),[g,_,a,s,v,y,u]);return(0,d.jsx)(f.Provider,{value:b,children:e})},h=({children:e,asChild:t,className:n})=>{let{onOpenChange:r,setIsKeyboardNavigating:i}=p(),a=e=>{i(e.detail===0),r(!0)};return t&&l.default.isValidElement(e)?l.default.cloneElement(e,{onClick:t=>{e.props.onClick?.(t),a(t)},className:(0,u.default)(n,e.props.className)}):(0,d.jsx)(`button`,{className:(0,u.default)(c.default.trigger,n),onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&i(!0)},children:e})},g=({children:e,className:a,"aria-label":o})=>{let{t:s}=t.useWimTranslation(`components`),{open:f,onOpenChange:m,activeIndex:h,setActiveIndex:g,isKeyboardNavigating:_,setIsKeyboardNavigating:v}=p(),y=(0,l.useRef)(null);return(0,d.jsx)(n.Portal,{children:(0,d.jsx)(r.Transition,{show:f,preset:`fade`,children:(0,d.jsx)(`div`,{role:`presentation`,className:c.default.overlay,onClick:e=>{e.target===e.currentTarget&&m(!1)},children:(0,d.jsx)(r.Transition,{show:f,preset:`scale`,children:(0,d.jsx)(i.FocusTrap,{active:f,children:(0,d.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":o??s(`command_palette.label`),className:(0,u.default)(`wim-command-palette`,c.default.content,a),onClick:e=>e.stopPropagation(),onMouseMove:e=>{if(!y.current){y.current={x:e.clientX,y:e.clientY};return}Math.sqrt((e.clientX-y.current.x)**2+(e.clientY-y.current.y)**2)>10&&v(!1),y.current={x:e.clientX,y:e.clientY}},"data-keyboard-nav":_,onKeyDown:e=>{v(!0);let t=e.currentTarget.querySelectorAll(`.${c.default.item}:not([aria-disabled="true"])`).length;t!==0&&(e.key===`ArrowDown`?(e.preventDefault(),g(e=>(e+1)%t)):e.key===`ArrowUp`?(e.preventDefault(),g(e=>(e-1+t)%t)):e.key===`Home`?(e.preventDefault(),g(0)):e.key===`End`?(e.preventDefault(),g(t-1)):e.key===`Enter`&&(e.preventDefault(),document.getElementById(`wim-command-palette-item-${h}`)?.click()))},children:e})})})})})})},_=({placeholder:e,value:t,onChange:n,rightSection:r})=>{let{search:i,setSearch:s,setActiveIndex:u,activeIndex:f}=p(),m=(0,l.useRef)(null);return(0,l.useEffect)(()=>{m.current?.focus()},[]),(0,d.jsxs)(`div`,{className:c.default.inputWrapper,children:[(0,d.jsx)(o.Icon,{component:a.default,size:`sm`}),(0,d.jsx)(`input`,{ref:m,className:c.default.input,placeholder:e,value:t??i,onChange:e=>{let t=e.target.value;s(t),u(0),n?.(t)},role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":!0,"aria-controls":`wim-command-palette-listbox`,"aria-activedescendant":`wim-command-palette-item-${f}`}),r&&(0,d.jsx)(`div`,{className:c.default.inputRight,children:r})]})},v=({children:e})=>(0,d.jsx)(`div`,{className:c.default.list,role:`listbox`,id:`wim-command-palette-listbox`,children:e}),y=({children:e,heading:t})=>(0,d.jsxs)(`div`,{className:c.default.group,children:[t&&(0,d.jsx)(`div`,{className:c.default.groupHeading,children:t}),e]}),b=({children:e,onSelect:t,icon:n,shortcut:r,disabled:i})=>{let{activeIndex:a,setActiveIndex:o,registerItem:u,onOpenChange:f}=p(),[m]=(0,l.useState)(()=>u()),h=a===m;return(0,l.useEffect)(()=>{h&&!i&&document.getElementById(`wim-command-palette-item-${m}`)?.scrollIntoView({block:`nearest`})},[h,i,m]),(0,d.jsx)(s.BaseListItem,{role:`option`,id:`wim-command-palette-item-${m}`,"aria-selected":h,className:c.default.item,active:h,disabled:i,icon:n,rightSection:r&&(0,d.jsx)(`div`,{className:c.default.shortcut,children:r.map(e=>(0,d.jsx)(`kbd`,{className:c.default.kbd,children:e},e))}),onMouseEnter:()=>!i&&o(m),onClick:()=>{i||(t?.(),f(!1))},children:e})},x=({children:e})=>{let{t:n}=t.useWimTranslation(`components`),r=e??n(`command_palette.no_results`),{open:i,search:a}=p(),[o,s]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{if(i){let e=setTimeout(()=>{let e=document.querySelectorAll(`.${c.default.item}`);s(e.length===0)},0);return()=>clearTimeout(e)}},[i,a]),!i||!o?null:(0,d.jsx)(`div`,{className:c.default.empty,children:r})},S=({children:e})=>(0,d.jsx)(`div`,{className:c.default.footer,children:e});exports.CommandPalette=m,exports.CommandPaletteContent=g,exports.CommandPaletteEmpty=x,exports.CommandPaletteFooter=S,exports.CommandPaletteGroup=y,exports.CommandPaletteInput=_,exports.CommandPaletteItem=b,exports.CommandPaletteList=v,exports.CommandPaletteTrigger=h;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../i18n/useWimTranslation.cjs"),n=require("../../overlay/Portal/Portal.cjs"),r=require("../../layout/Transition/Transition.cjs"),i=require("../../overlay/FocusTrap/FocusTrap.cjs"),a=require("../../../icon/search.cjs"),o=require("../../media/Icon/Icon.cjs"),s=require("../../_internal/BaseListItem/BaseListItem.cjs"),c=require("./command-palette.module.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("classnames");u=e.__toESM(u,1);let d=require("react/jsx-runtime");var f=(0,l.createContext)(void 0),p=()=>{let e=(0,l.useContext)(f);if(!e)throw Error(`CommandPalette sub-components must be used within a CommandPalette`);return e},m=({children:e,open:t,onOpenChange:n})=>{let[r,i]=(0,l.useState)(!1),[a,o]=(0,l.useState)(``),[s,c]=(0,l.useState)(0),[u,p]=(0,l.useState)(!1),m=(0,l.useRef)(0),h=t!==void 0,g=h?t:r,_=(0,l.useCallback)(e=>{h||i(e),n?.(e),e||(o(``),c(0))},[h,n]),v=(0,l.useCallback)(()=>{let e=m.current;return m.current+=1,e},[]),y=(0,l.useCallback)(()=>{--m.current},[]);m.current=0,(0,l.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key===`k`&&(e.preventDefault(),p(!0),_(!g)),e.key===`Escape`&&g&&_(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[g,_]);let b=l.default.useMemo(()=>({open:g,onOpenChange:_,search:a,setSearch:o,activeIndex:s,setActiveIndex:c,registerItem:v,unregisterItem:y,isKeyboardNavigating:u,setIsKeyboardNavigating:p}),[g,_,a,s,v,y,u]);return(0,d.jsx)(f.Provider,{value:b,children:e})},h=({children:e,asChild:t,className:n})=>{let{onOpenChange:r,setIsKeyboardNavigating:i}=p(),a=e=>{i(e.detail===0),r(!0)};return t&&l.default.isValidElement(e)?l.default.cloneElement(e,{onClick:t=>{e.props.onClick?.(t),a(t)},className:(0,u.default)(n,e.props.className)}):(0,d.jsx)(`button`,{className:(0,u.default)(c.default.trigger,n),onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&i(!0)},children:e})},g=({children:e,className:a,"aria-label":o})=>{let{t:s}=t.useWimTranslation(`components`),{open:f,onOpenChange:m,activeIndex:h,setActiveIndex:g,isKeyboardNavigating:_,setIsKeyboardNavigating:v}=p(),y=(0,l.useRef)(null);return(0,d.jsx)(n.Portal,{children:(0,d.jsx)(r.Transition,{show:f,preset:`fade`,children:(0,d.jsx)(`div`,{role:`presentation`,className:c.default.overlay,onClick:e=>{e.target===e.currentTarget&&m(!1)},children:(0,d.jsx)(r.Transition,{show:f,preset:`scale`,children:(0,d.jsx)(i.FocusTrap,{active:f,children:(0,d.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":o??s(`command_palette.label`),className:(0,u.default)(`wim-command-palette`,c.default.content,a),onClick:e=>e.stopPropagation(),onMouseMove:e=>{if(!y.current){y.current={x:e.clientX,y:e.clientY};return}Math.sqrt((e.clientX-y.current.x)**2+(e.clientY-y.current.y)**2)>10&&v(!1),y.current={x:e.clientX,y:e.clientY}},"data-keyboard-nav":_,onKeyDown:e=>{v(!0);let t=e.currentTarget.querySelectorAll(`.${c.default.item}:not([aria-disabled="true"])`).length;t!==0&&(e.key===`ArrowDown`?(e.preventDefault(),g(e=>(e+1)%t)):e.key===`ArrowUp`?(e.preventDefault(),g(e=>(e-1+t)%t)):e.key===`Home`?(e.preventDefault(),g(0)):e.key===`End`?(e.preventDefault(),g(t-1)):e.key===`Enter`&&(e.preventDefault(),document.getElementById(`wim-command-palette-item-${h}`)?.click()))},children:e})})})})})})},_=({placeholder:e,value:t,onChange:n,rightSection:r})=>{let{search:i,setSearch:s,setActiveIndex:u,activeIndex:f}=p(),m=(0,l.useRef)(null);return(0,l.useEffect)(()=>{m.current?.focus()},[]),(0,d.jsxs)(`div`,{className:c.default.inputWrapper,children:[(0,d.jsx)(o.Icon,{component:a.default,size:`sm`}),(0,d.jsx)(`input`,{ref:m,className:c.default.input,placeholder:e,value:t??i,onChange:e=>{let t=e.target.value;s(t),u(0),n?.(t)},role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":!0,"aria-controls":`wim-command-palette-listbox`,"aria-activedescendant":`wim-command-palette-item-${f}`}),r&&(0,d.jsx)(`div`,{className:c.default.inputRight,children:r})]})},v=({children:e})=>(0,d.jsx)(`div`,{className:c.default.list,role:`listbox`,id:`wim-command-palette-listbox`,children:e}),y=({children:e,heading:t})=>{let n=l.default.useId();return(0,d.jsxs)(`div`,{className:c.default.group,role:`group`,"aria-labelledby":t?n:void 0,children:[t&&(0,d.jsx)(`div`,{id:n,className:c.default.groupHeading,"aria-hidden":`true`,children:t}),e]})},b=({children:e,onSelect:t,icon:n,shortcut:r,disabled:i})=>{let{activeIndex:a,setActiveIndex:o,registerItem:u,onOpenChange:f}=p(),[m]=(0,l.useState)(()=>u()),h=a===m;return(0,l.useEffect)(()=>{h&&!i&&document.getElementById(`wim-command-palette-item-${m}`)?.scrollIntoView({block:`nearest`})},[h,i,m]),(0,d.jsx)(s.BaseListItem,{role:`option`,id:`wim-command-palette-item-${m}`,"aria-selected":h,className:c.default.item,active:h,disabled:i,icon:n,rightSection:r&&(0,d.jsx)(`div`,{className:c.default.shortcut,children:r.map(e=>(0,d.jsx)(`kbd`,{className:c.default.kbd,children:e},e))}),onMouseEnter:()=>!i&&o(m),onClick:()=>{i||(t?.(),f(!1))},children:e})},x=({children:e})=>{let{t:n}=t.useWimTranslation(`components`),r=e??n(`command_palette.no_results`),{open:i,search:a}=p(),[o,s]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{if(i){let e=setTimeout(()=>{let e=document.querySelectorAll(`.${c.default.item}`);s(e.length===0)},0);return()=>clearTimeout(e)}},[i,a]),!i||!o?null:(0,d.jsx)(`div`,{className:c.default.empty,children:r})},S=({children:e})=>(0,d.jsx)(`div`,{className:c.default.footer,children:e});exports.CommandPalette=m,exports.CommandPaletteContent=g,exports.CommandPaletteEmpty=x,exports.CommandPaletteFooter=S,exports.CommandPaletteGroup=y,exports.CommandPaletteInput=_,exports.CommandPaletteItem=b,exports.CommandPaletteList=v,exports.CommandPaletteTrigger=h;
@@ -155,13 +155,20 @@ var v = l(void 0), y = () => {
155
155
  role: "listbox",
156
156
  id: "wim-command-palette-listbox",
157
157
  children: e
158
- }), T = ({ children: e, heading: t }) => /* @__PURE__ */ _("div", {
159
- className: s.group,
160
- children: [t && /* @__PURE__ */ g("div", {
161
- className: s.groupHeading,
162
- children: t
163
- }), e]
164
- }), E = ({ children: e, onSelect: t, icon: n, shortcut: r, disabled: i }) => {
158
+ }), T = ({ children: e, heading: t }) => {
159
+ let n = c.useId();
160
+ return /* @__PURE__ */ _("div", {
161
+ className: s.group,
162
+ role: "group",
163
+ "aria-labelledby": t ? n : void 0,
164
+ children: [t && /* @__PURE__ */ g("div", {
165
+ id: n,
166
+ className: s.groupHeading,
167
+ "aria-hidden": "true",
168
+ children: t
169
+ }), e]
170
+ });
171
+ }, E = ({ children: e, onSelect: t, icon: n, shortcut: r, disabled: i }) => {
165
172
  let { activeIndex: a, setActiveIndex: c, registerItem: l, onOpenChange: u } = y(), [d] = m(() => l()), p = a === d;
166
173
  return f(() => {
167
174
  p && !i && document.getElementById(`wim-command-palette-item-${d}`)?.scrollIntoView({ block: "nearest" });
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../typography/Kbd/Kbd.cjs"),n=require("./keyboard-shortcuts.module.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("classnames");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=r.default.forwardRef(({shortcuts:e,title:o,separator:s=`+`,size:c=`md`,className:l,...u},d)=>(0,a.jsxs)(`div`,{className:(0,i.default)(`wim-keyboard-shortcuts`,n.default.root,n.default[c],l),children:[o&&(0,a.jsx)(`p`,{className:n.default.title,children:o}),(0,a.jsx)(`dl`,{ref:d,className:n.default.list,...u,children:e.map((e,i)=>(0,a.jsxs)(`div`,{className:n.default.item,children:[(0,a.jsx)(`dt`,{className:n.default.label,children:e.label}),(0,a.jsx)(`dd`,{className:n.default.keys,children:e.keys.map((e,i)=>(0,a.jsxs)(r.default.Fragment,{children:[i>0&&(0,a.jsx)(`span`,{className:n.default.separator,"aria-hidden":`true`,children:s}),(0,a.jsx)(t.Kbd,{size:c,children:e})]},i))})]},i))})]}));o.displayName=`KeyboardShortcuts`,exports.KeyboardShortcuts=o;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../typography/Kbd/Kbd.cjs"),n=require("./keyboard-shortcuts.module.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("classnames");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=r.default.forwardRef(({shortcuts:e,title:o,titleLevel:s,separator:c=`+`,size:l=`md`,className:u,...d},f)=>{let p=s?`h${s}`:null;return(0,a.jsxs)(`div`,{className:(0,i.default)(`wim-keyboard-shortcuts`,n.default.root,n.default[l],u),children:[o&&(p?(0,a.jsx)(p,{className:n.default.title,children:o}):(0,a.jsx)(`p`,{className:n.default.title,children:o})),(0,a.jsx)(`dl`,{ref:f,className:n.default.list,...d,children:e.map((e,i)=>(0,a.jsxs)(`div`,{className:n.default.item,children:[(0,a.jsx)(`dt`,{className:n.default.label,children:e.label}),(0,a.jsx)(`dd`,{className:n.default.keys,children:e.keys.map((e,i)=>(0,a.jsxs)(r.default.Fragment,{children:[i>0&&(0,a.jsx)(`span`,{className:n.default.separator,"aria-hidden":`true`,children:c}),(0,a.jsx)(t.Kbd,{size:l,children:e})]},i))})]},i))})]})});o.displayName=`KeyboardShortcuts`,exports.KeyboardShortcuts=o;
@@ -6,11 +6,23 @@ export type ShortcutItem = {
6
6
  /** Keys of the shortcut (e.g. ["Ctrl", "K"]) */
7
7
  keys: string[];
8
8
  };
9
+ /** 見出しの段。`Dashboard` の `titleLevel` と同じ語彙に揃えてある(T211)。 */
10
+ export type KeyboardShortcutsTitleLevel = 2 | 3 | 4 | 5 | 6;
9
11
  export type KeyboardShortcutsProps = React.ComponentPropsWithoutRef<"dl"> & {
10
12
  /** List of shortcuts to display */
11
13
  shortcuts: ShortcutItem[];
12
14
  /** Section title */
13
15
  title?: string;
16
+ /**
17
+ * `title` を見出しとして描くときの段(T211)。渡さなければ見出しにならず `p` のまま。
18
+ *
19
+ * ショートカット一覧は「編集」「移動」のように節ごとに積んで使うので、段で辿れると
20
+ * 効く。ただし既定を見出しにはしない ── 段を決め打つとページに `h1` / `h2` がある
21
+ * 場合に段が飛び、axe の `heading-order` が鳴る(T191 で `Footer` が実際に踏んだ)。
22
+ * 段を決めるのはページ側の構造を知っている呼び出し元の仕事で、`Alert` の `titleTag`
23
+ * (既定 `div`)と同じ形。
24
+ */
25
+ titleLevel?: KeyboardShortcutsTitleLevel;
14
26
  /**
15
27
  * Separator displayed between keys
16
28
  * @default "+"
@@ -30,6 +42,16 @@ export declare const KeyboardShortcuts: React.ForwardRefExoticComponent<Omit<Rea
30
42
  shortcuts: ShortcutItem[];
31
43
  /** Section title */
32
44
  title?: string;
45
+ /**
46
+ * `title` を見出しとして描くときの段(T211)。渡さなければ見出しにならず `p` のまま。
47
+ *
48
+ * ショートカット一覧は「編集」「移動」のように節ごとに積んで使うので、段で辿れると
49
+ * 効く。ただし既定を見出しにはしない ── 段を決め打つとページに `h1` / `h2` がある
50
+ * 場合に段が飛び、axe の `heading-order` が鳴る(T191 で `Footer` が実際に踏んだ)。
51
+ * 段を決めるのはページ側の構造を知っている呼び出し元の仕事で、`Alert` の `titleTag`
52
+ * (既定 `div`)と同じ形。
53
+ */
54
+ titleLevel?: KeyboardShortcutsTitleLevel;
33
55
  /**
34
56
  * Separator displayed between keys
35
57
  * @default "+"
@@ -5,34 +5,37 @@ import n from "react";
5
5
  import r from "classnames";
6
6
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
7
  //#region src/components/navigation/KeyboardShortcuts/KeyboardShortcuts.tsx
8
- var o = n.forwardRef(({ shortcuts: o, title: s, separator: c = "+", size: l = "md", className: u, ...d }, f) => /* @__PURE__ */ a("div", {
9
- className: r("wim-keyboard-shortcuts", t.root, t[l], u),
10
- children: [s && /* @__PURE__ */ i("p", {
11
- className: t.title,
12
- children: s
13
- }), /* @__PURE__ */ i("dl", {
14
- ref: f,
15
- className: t.list,
16
- ...d,
17
- children: o.map((r, o) => /* @__PURE__ */ a("div", {
18
- className: t.item,
19
- children: [/* @__PURE__ */ i("dt", {
20
- className: t.label,
21
- children: r.label
22
- }), /* @__PURE__ */ i("dd", {
23
- className: t.keys,
24
- children: r.keys.map((r, o) => /* @__PURE__ */ a(n.Fragment, { children: [o > 0 && /* @__PURE__ */ i("span", {
25
- className: t.separator,
26
- "aria-hidden": "true",
27
- children: c
28
- }), /* @__PURE__ */ i(e, {
29
- size: l,
30
- children: r
31
- })] }, o))
32
- })]
33
- }, o))
34
- })]
35
- }));
8
+ var o = n.forwardRef(({ shortcuts: o, title: s, titleLevel: c, separator: l = "+", size: u = "md", className: d, ...f }, p) => {
9
+ let m = c ? `h${c}` : null;
10
+ return /* @__PURE__ */ a("div", {
11
+ className: r("wim-keyboard-shortcuts", t.root, t[u], d),
12
+ children: [s && i(m || "p", {
13
+ className: t.title,
14
+ children: s
15
+ }), /* @__PURE__ */ i("dl", {
16
+ ref: p,
17
+ className: t.list,
18
+ ...f,
19
+ children: o.map((r, o) => /* @__PURE__ */ a("div", {
20
+ className: t.item,
21
+ children: [/* @__PURE__ */ i("dt", {
22
+ className: t.label,
23
+ children: r.label
24
+ }), /* @__PURE__ */ i("dd", {
25
+ className: t.keys,
26
+ children: r.keys.map((r, o) => /* @__PURE__ */ a(n.Fragment, { children: [o > 0 && /* @__PURE__ */ i("span", {
27
+ className: t.separator,
28
+ "aria-hidden": "true",
29
+ children: l
30
+ }), /* @__PURE__ */ i(e, {
31
+ size: u,
32
+ children: r
33
+ })] }, o))
34
+ })]
35
+ }, o))
36
+ })]
37
+ });
38
+ });
36
39
  o.displayName = "KeyboardShortcuts";
37
40
  //#endregion
38
41
  export { o as KeyboardShortcuts };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../layout/Transition/Transition.cjs"),r=require("../../../hooks/useMergedRef.cjs"),i=require("../../_internal/BaseListItem/BaseListItem.cjs"),a=require("./context-menu.module.cjs");let o=require("react");o=e.__toESM(o,1);let s=require("classnames");s=e.__toESM(s,1);let c=require("react/jsx-runtime"),l=require("@floating-ui/react");var u=o.default.createContext(null),d=({children:e,menu:i,className:d,disabled:f=!1,asChild:p=!1})=>{let[m,h]=(0,o.useState)(!1),[g,_]=(0,o.useState)(null),[v,y]=(0,o.useState)(!1),b=(0,o.useRef)([]),x=(0,o.useRef)(null),S=r.useMergedRef(x),{refs:C,floatingStyles:w,context:T}=(0,l.useFloating)({open:m,onOpenChange:e=>{h(e),e||(_(null),y(!1))},strategy:`fixed`,middleware:[(0,l.flip)(),(0,l.shift)({padding:10})],whileElementsMounted:l.autoUpdate}),{getFloatingProps:E,getItemProps:D}=(0,l.useInteractions)([(0,l.useDismiss)(T),(0,l.useRole)(T,{role:`menu`}),(0,l.useListNavigation)(T,{listRef:b,activeIndex:g,onNavigate:_,loop:!0})]),O=(e,t,n)=>{C.setReference({getBoundingClientRect(){return{width:0,height:0,x:e,y:t,top:t,left:e,right:e,bottom:t}}}),y(n),h(!0),_(0)},k=e=>{if(e.preventDefault(),f)return;let t=e.clientX===0&&e.clientY===0;O(e.clientX,e.clientY,t)},A=e=>{if(!f&&(e.key===`Enter`||e.key===` `)){e.preventDefault();let t=x.current?.getBoundingClientRect();t&&O(t.left+t.width/2,t.top+t.height/2,!0)}},j=()=>{h(!1)};return(0,c.jsxs)(p?t.Root:`div`,{ref:S,className:(0,s.default)(`wim-context-menu`,!p&&a.default.container,f&&a.default.disabled,d),onContextMenu:k,onKeyDown:A,tabIndex:f?-1:0,"data-testid":`context-menu-trigger`,children:[(0,c.jsx)(t.Slottable,{children:e}),(0,c.jsx)(l.FloatingPortal,{children:(0,c.jsx)(n.Transition,{show:m,preset:`fade`,children:(0,c.jsx)(l.FloatingFocusManager,{context:T,modal:!0,initialFocus:v?g??0:-1,children:(0,c.jsx)(`div`,{ref:C.setFloating,className:a.default.menu,style:w,...E({onClick:j,onKeyDown(e){e.key===`Escape`&&j()}}),children:(0,c.jsx)(u.Provider,{value:{activeIndex:g,getItemProps:D},children:(0,c.jsx)(l.FloatingList,{elementsRef:b,children:i})})})})})})]})},f=({children:e,onClick:t,disabled:n=!1,className:r,icon:d,danger:f=!1,asChild:p=!1})=>{let{ref:m,index:h}=(0,l.useListItem)(),g=(0,o.useContext)(u),_=()=>{n||t&&t()},v=g?g.getItemProps({index:h,onClick:()=>_(),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),_())}}):{},y={ref:m,className:(0,s.default)(a.default.item,r),disabled:n,danger:f,icon:d,role:`menuitem`,tabIndex:g?.activeIndex===h?0:-1,...v};return p?(0,c.jsx)(`li`,{role:`none`,children:(0,c.jsx)(i.BaseListItem,{asChild:!0,...y,children:e})}):(0,c.jsx)(i.BaseListItem,{...y,children:e})},p=({className:e})=>(0,c.jsx)(`div`,{className:(0,s.default)(a.default.divider,e),role:`separator`}),m=({children:e,title:t,className:n})=>(0,c.jsxs)(`div`,{role:`group`,className:n,"data-testid":`context-menu-group`,children:[t&&(0,c.jsx)(`div`,{className:a.default.groupTitle,"data-testid":`context-menu-group-title`,children:t}),e]}),h=e=>(0,c.jsx)(d,{...e});h.displayName=`ContextMenu`,h.Item=f,h.Divider=p,h.Group=m,exports.ContextMenu=h,exports.default=h,exports.ContextMenuDivider=p,exports.ContextMenuGroup=m,exports.ContextMenuItem=f;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/@radix-ui/react-slot/dist/index.cjs"),n=require("../../layout/Transition/Transition.cjs"),r=require("../../../hooks/useMergedRef.cjs"),i=require("../../_internal/BaseListItem/BaseListItem.cjs"),a=require("./context-menu.module.cjs");let o=require("react");o=e.__toESM(o,1);let s=require("classnames");s=e.__toESM(s,1);let c=require("react/jsx-runtime"),l=require("@floating-ui/react");var u=o.default.createContext(null),d=({children:e,menu:i,className:d,disabled:f=!1,asChild:p=!1})=>{let[m,h]=(0,o.useState)(!1),[g,_]=(0,o.useState)(null),[v,y]=(0,o.useState)(!1),b=(0,o.useRef)([]),x=(0,o.useRef)(null),S=r.useMergedRef(x),{refs:C,floatingStyles:w,context:T}=(0,l.useFloating)({open:m,onOpenChange:e=>{h(e),e||(_(null),y(!1))},strategy:`fixed`,middleware:[(0,l.flip)(),(0,l.shift)({padding:10})],whileElementsMounted:l.autoUpdate}),{getFloatingProps:E,getItemProps:D}=(0,l.useInteractions)([(0,l.useDismiss)(T),(0,l.useRole)(T,{role:`menu`}),(0,l.useListNavigation)(T,{listRef:b,activeIndex:g,onNavigate:_,loop:!0})]),O=(e,t,n)=>{C.setReference({getBoundingClientRect(){return{width:0,height:0,x:e,y:t,top:t,left:e,right:e,bottom:t}}}),y(n),h(!0),_(0)},k=e=>{if(e.preventDefault(),f)return;let t=e.clientX===0&&e.clientY===0;O(e.clientX,e.clientY,t)},A=e=>{if(!f&&(e.key===`Enter`||e.key===` `)){e.preventDefault();let t=x.current?.getBoundingClientRect();t&&O(t.left+t.width/2,t.top+t.height/2,!0)}},j=()=>{h(!1)};return(0,c.jsxs)(p?t.Root:`div`,{ref:S,className:(0,s.default)(`wim-context-menu`,!p&&a.default.container,f&&a.default.disabled,d),onContextMenu:k,onKeyDown:A,tabIndex:f?-1:0,"data-testid":`context-menu-trigger`,children:[(0,c.jsx)(t.Slottable,{children:e}),(0,c.jsx)(l.FloatingPortal,{children:(0,c.jsx)(n.Transition,{show:m,preset:`fade`,children:(0,c.jsx)(l.FloatingFocusManager,{context:T,modal:!0,initialFocus:v?g??0:-1,children:(0,c.jsx)(`div`,{ref:C.setFloating,className:a.default.menu,style:w,...E({onClick:j,onKeyDown(e){e.key===`Escape`&&j()}}),children:(0,c.jsx)(u.Provider,{value:{activeIndex:g,getItemProps:D},children:(0,c.jsx)(l.FloatingList,{elementsRef:b,children:i})})})})})})]})},f=({children:e,onClick:t,disabled:n=!1,className:r,icon:d,danger:f=!1,asChild:p=!1})=>{let{ref:m,index:h}=(0,l.useListItem)(),g=(0,o.useContext)(u),_=()=>{n||t&&t()},v=g?g.getItemProps({index:h,onClick:()=>_(),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),_())}}):{},y={ref:m,className:(0,s.default)(a.default.item,r),disabled:n,danger:f,icon:d,role:`menuitem`,tabIndex:g?.activeIndex===h?0:-1,...v};return p?(0,c.jsx)(`li`,{role:`none`,children:(0,c.jsx)(i.BaseListItem,{asChild:!0,...y,children:e})}):(0,c.jsx)(i.BaseListItem,{...y,children:e})},p=({className:e})=>(0,c.jsx)(`div`,{className:(0,s.default)(a.default.divider,e),role:`separator`}),m=({children:e,title:t,className:n})=>{let r=o.default.useId();return(0,c.jsxs)(`div`,{role:`group`,"aria-labelledby":t?r:void 0,className:n,"data-testid":`context-menu-group`,children:[t&&(0,c.jsx)(`div`,{id:r,className:a.default.groupTitle,"data-testid":`context-menu-group-title`,"aria-hidden":`true`,children:t}),e]})},h=e=>(0,c.jsx)(d,{...e});h.displayName=`ContextMenu`,h.Item=f,h.Divider=p,h.Group=m,exports.ContextMenu=h,exports.default=h,exports.ContextMenuDivider=p,exports.ContextMenuGroup=m,exports.ContextMenuItem=f;
@@ -124,16 +124,22 @@ var T = o.createContext(null), E = ({ children: i, menu: o, className: s, disabl
124
124
  }, O = ({ className: e }) => /* @__PURE__ */ d("div", {
125
125
  className: u(a.divider, e),
126
126
  role: "separator"
127
- }), k = ({ children: e, title: t, className: n }) => /* @__PURE__ */ f("div", {
128
- role: "group",
129
- className: n,
130
- "data-testid": "context-menu-group",
131
- children: [t && /* @__PURE__ */ d("div", {
132
- className: a.groupTitle,
133
- "data-testid": "context-menu-group-title",
134
- children: t
135
- }), e]
136
- }), A = (e) => /* @__PURE__ */ d(E, { ...e });
127
+ }), k = ({ children: e, title: t, className: n }) => {
128
+ let r = o.useId();
129
+ return /* @__PURE__ */ f("div", {
130
+ role: "group",
131
+ "aria-labelledby": t ? r : void 0,
132
+ className: n,
133
+ "data-testid": "context-menu-group",
134
+ children: [t && /* @__PURE__ */ d("div", {
135
+ id: r,
136
+ className: a.groupTitle,
137
+ "data-testid": "context-menu-group-title",
138
+ "aria-hidden": "true",
139
+ children: t
140
+ }), e]
141
+ });
142
+ }, A = (e) => /* @__PURE__ */ d(E, { ...e });
137
143
  A.displayName = "ContextMenu", A.Item = D, A.Divider = O, A.Group = k;
138
144
  //#endregion
139
145
  export { A as ContextMenu, A as default, O as ContextMenuDivider, k as ContextMenuGroup, D as ContextMenuItem };
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## What this is
6
6
 
7
- **wimui** v0.24.3 — a React 19 component library: 218 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
7
+ **wimui** v0.25.0 — a React 19 component library: 218 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
8
8
 
9
9
  ## Install & required setup
10
10
 
@@ -2010,6 +2010,13 @@ follows the theme and never needs a hand-mixed colour.
2010
2010
  - **KeyboardShortcuts** — Display a structured list of keyboard shortcuts
2011
2011
  - `shortcuts: ShortcutItem[]` (required) — List of shortcuts to display
2012
2012
  - `title: string` — Section title
2013
+ - `titleLevel: 2 | 3 | 4 | 5 | 6` — `title` を見出しとして描くときの段(T211)。渡さなければ見出しにならず `p` のまま。
2014
+
2015
+ ショートカット一覧は「編集」「移動」のように節ごとに積んで使うので、段で辿れると
2016
+ 効く。ただし既定を見出しにはしない ── 段を決め打つとページに `h1` / `h2` がある
2017
+ 場合に段が飛び、axe の `heading-order` が鳴る(T191 で `Footer` が実際に踏んだ)。
2018
+ 段を決めるのはページ側の構造を知っている呼び出し元の仕事で、`Alert` の `titleTag`
2019
+ (既定 `div`)と同じ形。
2013
2020
  - `separator: string` = "+" — Separator displayed between keys
2014
2021
  @default "+"
2015
2022
  - `size: Extract<ComponentSize, "sm" | "md" | "lg">` = "md" — Size of the list
package/dist/llms.txt CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## What this is
6
6
 
7
- **wimui** v0.24.3 — a React 19 component library: 218 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
7
+ **wimui** v0.25.0 — a React 19 component library: 218 documented components across 10 categories, with design tokens, dark mode, i18n (en/ja/pt-BR) and WAI-ARIA compliant a11y. Peer deps: react ^19, react-dom ^19 (plus optional peers for specific components — see package.json).
8
8
 
9
9
  ## Install & required setup
10
10