wimui 0.50.3 → 0.50.4

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("../../layout/Transition/Transition.cjs"),r=require("../../_internal/BaseListItem/BaseListItem.cjs"),i=require("./menubar.module.cjs");let a=require("react");a=e.__toESM(a,1);let o=require("classnames");o=e.__toESM(o,1);let s=require("react/jsx-runtime");var c=(0,a.createContext)(null),l=(0,a.createContext)(null),u=()=>{let e=(0,a.useContext)(c);if(!e)throw Error(`Menubar compound parts must be used within <Menubar>`);return e},d=()=>{let e=(0,a.useContext)(l);if(!e)throw Error(`Menubar.Trigger/Content/Item must be used within <Menubar.Menu>`);return e},f=a.default.forwardRef(({asChild:e=!1,className:n,children:r,onKeyDown:l,...u},d)=>{let[f,p]=(0,a.useState)(null),m=(0,a.useRef)(new Map),h=(0,a.useRef)(null),g=(0,a.useCallback)(e=>{h.current=e,typeof d==`function`?d(e):d&&(d.current=e)},[d]),_=(0,a.useCallback)((e,t)=>{t?m.current.set(e,t):m.current.delete(e)},[]),v=(0,a.useCallback)(()=>Array.from(m.current.keys()),[]),y=(0,a.useCallback)(e=>{m.current.get(e)?.focus()},[]);(0,a.useEffect)(()=>{if(!f)return;let e=e=>{h.current&&!h.current.contains(e.target)&&p(null)},t=e=>{e.key===`Escape`&&(p(null),f&&y(f))};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[f,y]);let b=e=>{if(l?.(e),e.defaultPrevented)return;let t=v();if(t.length===0)return;let n=f??t.find(e=>m.current.get(e)===document.activeElement)??null;if(!n)return;let r=t.indexOf(n);if(!(r<0)){if(e.key===`ArrowRight`){e.preventDefault();let n=t[(r+1)%t.length];f&&p(n),y(n)}else if(e.key===`ArrowLeft`){e.preventDefault();let n=t[(r-1+t.length)%t.length];f&&p(n),y(n)}else if(e.key===`Home`){e.preventDefault();let n=t[0];f&&p(n),y(n)}else if(e.key===`End`){e.preventDefault();let n=t[t.length-1];f&&p(n),y(n)}}},x=(0,a.useMemo)(()=>({openMenuId:f,setOpenMenuId:p,registerTrigger:_,getTriggerIds:v,focusTrigger:y}),[f,_,v,y]),S=e?t.Root:`div`;return(0,s.jsx)(c.Provider,{value:x,children:(0,s.jsx)(S,{ref:g,role:`menubar`,className:(0,o.default)(`wim-menubar`,i.default.root,n),onKeyDown:b,...u,children:(0,s.jsx)(t.Slottable,{children:r})})})});f.displayName=`Menubar`;var p=a.default.forwardRef(({value:e,disabled:t=!1,className:n,children:r,...c},d)=>{let{openMenuId:f,setOpenMenuId:p}=u(),m=(0,a.useId)(),h=`wim-menubar-trigger-${e}-${m}`,g=`wim-menubar-content-${e}-${m}`,_=f===e,v=()=>{t||p(e)},y=()=>p(null),b=()=>{t||p(_?null:e)},x=(0,a.useMemo)(()=>({menuId:e,triggerId:h,contentId:g,isOpen:_,open:v,close:y,toggle:b}),[e,h,g,_,t]);return(0,s.jsx)(l.Provider,{value:x,children:(0,s.jsx)(`div`,{ref:d,role:`none`,"data-disabled":t||void 0,className:(0,o.default)(i.default.menu,n),...c,children:r})})});p.displayName=`Menubar.Menu`;var m=a.default.forwardRef(({asChild:e=!1,className:n,children:r,onKeyDown:c,onMouseEnter:l,...f},p)=>{let{openMenuId:m,registerTrigger:h}=u(),{triggerId:g,contentId:_,isOpen:v,open:y,toggle:b,menuId:x}=d(),S=!!f.disabled,C=(0,a.useCallback)(e=>{h(x,e),typeof p==`function`?p(e):p&&(p.current=e)},[h,x,p]),w=e=>{c?.(e),!(e.defaultPrevented||S)&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())},T=e=>{l?.(e),m&&!S&&y()};return(0,s.jsx)(e?t.Root:`button`,{...f,ref:C,type:e?void 0:`button`,id:g,role:`menuitem`,"aria-haspopup":`menu`,"aria-expanded":v,"aria-controls":v?_:void 0,disabled:S,className:(0,o.default)(i.default.trigger,v&&i.default.triggerOpen,n),onClick:b,onKeyDown:w,onMouseEnter:T,children:(0,s.jsx)(t.Slottable,{children:r})})});m.displayName=`Menubar.Trigger`;var h=a.default.forwardRef(({align:e=`start`,className:t,children:r,...c},l)=>{let{contentId:u,triggerId:f,isOpen:p}=d(),[m,h]=(0,a.useState)(-1),[g,_]=(0,a.useState)(p),v=(0,a.useRef)(null);p!==g&&(_(p),h(p?0:-1));let y=(0,a.useCallback)(e=>{v.current=e,typeof l==`function`?l(e):l&&(l.current=e)},[l]);(0,a.useEffect)(()=>{!p||m<0||Array.from(v.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[])[m]?.focus()},[m,p]);let b=e=>{let t=Array.from(v.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),h(e=>e<t.length-1?e+1:0);break;case`ArrowUp`:e.preventDefault(),h(e=>e>0?e-1:t.length-1);break;case`Home`:e.preventDefault(),h(0);break;case`End`:e.preventDefault(),h(t.length-1)}};return(0,s.jsx)(n.Transition,{...c,ref:y,show:p,preset:`fade`,id:u,role:`menu`,"aria-labelledby":f,className:(0,o.default)(i.default.content,e===`end`?i.default.alignEnd:i.default.alignStart,t),onKeyDown:b,children:r})});h.displayName=`Menubar.Content`;var g=a.default.forwardRef(({children:e,onSelect:t,onClick:n,disabled:a=!1,className:c,...l},u)=>{let{close:f}=d(),p=e=>{a||(e.stopPropagation(),t?.(),n?.(e),f())};return(0,s.jsx)(r.BaseListItem,{...l,ref:u,className:(0,o.default)(i.default.item,c),disabled:a,role:`menuitem`,tabIndex:-1,onClick:p,onKeyDown:e=>{!a&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),p(e))},children:e})});g.displayName=`Menubar.Item`;var _=a.default.forwardRef(({className:e,...t},n)=>(0,s.jsx)(`div`,{ref:n,role:`separator`,className:(0,o.default)(i.default.separator,e),...t}));_.displayName=`Menubar.Separator`;var v=f;v.Menu=p,v.Trigger=m,v.Content=h,v.Item=g,v.Separator=_,exports.Menubar=v,exports.default=v;
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("../../_internal/BaseListItem/BaseListItem.cjs"),i=require("./menubar.module.cjs");let a=require("react");a=e.__toESM(a,1);let o=require("classnames");o=e.__toESM(o,1);let s=require("react/jsx-runtime");var c=(0,a.createContext)(null),l=(0,a.createContext)(null),u=()=>{let e=(0,a.useContext)(c);if(!e)throw Error(`Menubar compound parts must be used within <Menubar>`);return e},d=()=>{let e=(0,a.useContext)(l);if(!e)throw Error(`Menubar.Trigger/Content/Item must be used within <Menubar.Menu>`);return e},f=a.default.forwardRef(({asChild:e=!1,className:n,children:r,onKeyDown:l,...u},d)=>{let[f,p]=(0,a.useState)(null),m=(0,a.useRef)(new Map),h=(0,a.useRef)(null),g=(0,a.useCallback)(e=>{h.current=e,typeof d==`function`?d(e):d&&(d.current=e)},[d]),_=(0,a.useCallback)((e,t)=>{t?m.current.set(e,t):m.current.delete(e)},[]),v=(0,a.useCallback)(()=>Array.from(m.current.keys()),[]),y=(0,a.useCallback)(e=>{m.current.get(e)?.focus()},[]);(0,a.useEffect)(()=>{if(!f)return;let e=e=>{h.current&&!h.current.contains(e.target)&&p(null)},t=e=>{e.key===`Escape`&&(p(null),f&&y(f))};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[f,y]);let b=e=>{if(l?.(e),e.defaultPrevented)return;let t=v();if(t.length===0)return;let n=f??t.find(e=>m.current.get(e)===document.activeElement)??null;if(!n)return;let r=t.indexOf(n);if(!(r<0)){if(e.key===`ArrowRight`){e.preventDefault();let n=t[(r+1)%t.length];f&&p(n),y(n)}else if(e.key===`ArrowLeft`){e.preventDefault();let n=t[(r-1+t.length)%t.length];f&&p(n),y(n)}else if(e.key===`Home`){e.preventDefault();let n=t[0];f&&p(n),y(n)}else if(e.key===`End`){e.preventDefault();let n=t[t.length-1];f&&p(n),y(n)}}},x=(0,a.useMemo)(()=>({openMenuId:f,setOpenMenuId:p,registerTrigger:_,getTriggerIds:v,focusTrigger:y}),[f,_,v,y]),S=e?t.Root:`div`;return(0,s.jsx)(c.Provider,{value:x,children:(0,s.jsx)(S,{ref:g,role:`menubar`,className:(0,o.default)(`wim-menubar`,i.default.root,n),onKeyDown:b,...u,children:(0,s.jsx)(t.Slottable,{children:r})})})});f.displayName=`Menubar`;var p=a.default.forwardRef(({value:e,disabled:t=!1,className:n,children:r,...c},d)=>{let{openMenuId:f,setOpenMenuId:p,focusTrigger:m}=u(),h=(0,a.useId)(),g=`wim-menubar-trigger-${e}-${h}`,_=`wim-menubar-content-${e}-${h}`,v=f===e,y=()=>{t||p(e)},b=()=>{m(e),p(null)},x=()=>{t||p(v?null:e)},S=(0,a.useMemo)(()=>({menuId:e,triggerId:g,contentId:_,isOpen:v,open:y,close:b,toggle:x}),[e,g,_,v,t]);return(0,s.jsx)(l.Provider,{value:S,children:(0,s.jsx)(`div`,{ref:d,role:`none`,"data-disabled":t||void 0,className:(0,o.default)(i.default.menu,n),...c,children:r})})});p.displayName=`Menubar.Menu`;var m=a.default.forwardRef(({asChild:e=!1,className:n,children:r,onKeyDown:c,onMouseEnter:l,...f},p)=>{let{openMenuId:m,registerTrigger:h}=u(),{triggerId:g,contentId:_,isOpen:v,open:y,toggle:b,menuId:x}=d(),S=!!f.disabled,C=(0,a.useCallback)(e=>{h(x,e),typeof p==`function`?p(e):p&&(p.current=e)},[h,x,p]),w=e=>{c?.(e),!(e.defaultPrevented||S)&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())},T=e=>{l?.(e),m&&!S&&y()};return(0,s.jsx)(e?t.Root:`button`,{...f,ref:C,type:e?void 0:`button`,id:g,role:`menuitem`,"aria-haspopup":`menu`,"aria-expanded":v,"aria-controls":v?_:void 0,disabled:S,className:(0,o.default)(i.default.trigger,v&&i.default.triggerOpen,n),onClick:b,onKeyDown:w,onMouseEnter:T,children:(0,s.jsx)(t.Slottable,{children:r})})});m.displayName=`Menubar.Trigger`;var h=a.default.forwardRef(({align:e=`start`,className:t,children:r,...c},l)=>{let{contentId:u,triggerId:f,isOpen:p,close:m}=d(),[h,g]=(0,a.useState)(-1),[_,v]=(0,a.useState)(p),y=(0,a.useRef)(null);p!==_&&(v(p),g(p?0:-1));let b=(0,a.useCallback)(e=>{y.current=e,typeof l==`function`?l(e):l&&(l.current=e)},[l]);(0,a.useEffect)(()=>{!p||h<0||Array.from(y.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[])[h]?.focus()},[h,p]);let x=e=>{let t=Array.from(y.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),g(e=>e<t.length-1?e+1:0);break;case`ArrowUp`:e.preventDefault(),g(e=>e>0?e-1:t.length-1);break;case`Home`:e.preventDefault(),g(0);break;case`End`:e.preventDefault(),g(t.length-1);break;case`Tab`:m()}};return(0,s.jsx)(n.Transition,{...c,ref:b,show:p,preset:`fade`,id:u,role:`menu`,"aria-labelledby":f,className:(0,o.default)(i.default.content,e===`end`?i.default.alignEnd:i.default.alignStart,t),onKeyDown:x,children:r})});h.displayName=`Menubar.Content`;var g=a.default.forwardRef(({children:e,onSelect:t,onClick:n,disabled:a=!1,className:c,...l},u)=>{let{close:f}=d(),p=e=>{a||(e.stopPropagation(),t?.(),n?.(e),f())};return(0,s.jsx)(r.BaseListItem,{...l,ref:u,className:(0,o.default)(i.default.item,c),disabled:a,role:`menuitem`,tabIndex:-1,onClick:p,onKeyDown:e=>{!a&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),p(e))},children:e})});g.displayName=`Menubar.Item`;var _=a.default.forwardRef(({className:e,...t},n)=>(0,s.jsx)(`div`,{ref:n,role:`separator`,className:(0,o.default)(i.default.separator,e),...t}));_.displayName=`Menubar.Separator`;var v=f;v.Menu=p,v.Trigger=m,v.Content=h,v.Item=g,v.Separator=_,exports.Menubar=v,exports.default=v;
@@ -86,27 +86,29 @@ var g = o(null), _ = o(null), v = () => {
86
86
  });
87
87
  b.displayName = "Menubar";
88
88
  var x = a.forwardRef(({ value: e, disabled: t = !1, className: n, children: r, ...a }, o) => {
89
- let { openMenuId: s, setOpenMenuId: c } = v(), l = u(), f = `wim-menubar-trigger-${e}-${l}`, p = `wim-menubar-content-${e}-${l}`, g = s === e, y = () => {
89
+ let { openMenuId: s, setOpenMenuId: c, focusTrigger: l } = v(), f = u(), p = `wim-menubar-trigger-${e}-${f}`, g = `wim-menubar-content-${e}-${f}`, y = s === e, b = () => {
90
90
  t || c(e);
91
- }, b = () => c(null), x = () => {
92
- t || c(g ? null : e);
93
- }, S = d(() => ({
91
+ }, x = () => {
92
+ l(e), c(null);
93
+ }, S = () => {
94
+ t || c(y ? null : e);
95
+ }, C = d(() => ({
94
96
  menuId: e,
95
- triggerId: f,
96
- contentId: p,
97
- isOpen: g,
98
- open: y,
99
- close: b,
100
- toggle: x
97
+ triggerId: p,
98
+ contentId: g,
99
+ isOpen: y,
100
+ open: b,
101
+ close: x,
102
+ toggle: S
101
103
  }), [
102
104
  e,
103
- f,
104
105
  p,
105
106
  g,
107
+ y,
106
108
  t
107
109
  ]);
108
110
  return /* @__PURE__ */ h(_.Provider, {
109
- value: S,
111
+ value: C,
110
112
  children: /* @__PURE__ */ h("div", {
111
113
  ref: o,
112
114
  role: "none",
@@ -149,39 +151,42 @@ var S = a.forwardRef(({ asChild: n = !1, className: r, children: a, onKeyDown: o
149
151
  });
150
152
  S.displayName = "Menubar.Trigger";
151
153
  var C = a.forwardRef(({ align: e = "start", className: t, children: r, ...a }, o) => {
152
- let { contentId: c, triggerId: u, isOpen: d } = y(), [g, _] = p(-1), [v, b] = p(d), x = f(null);
153
- d !== v && (b(d), _(d ? 0 : -1));
154
- let S = s((e) => {
155
- x.current = e, typeof o == "function" ? o(e) : o && (o.current = e);
154
+ let { contentId: c, triggerId: u, isOpen: d, close: g } = y(), [_, v] = p(-1), [b, x] = p(d), S = f(null);
155
+ d !== b && (x(d), v(d ? 0 : -1));
156
+ let C = s((e) => {
157
+ S.current = e, typeof o == "function" ? o(e) : o && (o.current = e);
156
158
  }, [o]);
157
159
  l(() => {
158
- !d || g < 0 || Array.from(x.current?.querySelectorAll("[role=\"menuitem\"]:not([aria-disabled=\"true\"])") ?? [])[g]?.focus();
159
- }, [g, d]);
160
- let C = (e) => {
161
- let t = Array.from(x.current?.querySelectorAll("[role=\"menuitem\"]:not([aria-disabled=\"true\"])") ?? []);
160
+ !d || _ < 0 || Array.from(S.current?.querySelectorAll("[role=\"menuitem\"]:not([aria-disabled=\"true\"])") ?? [])[_]?.focus();
161
+ }, [_, d]);
162
+ let w = (e) => {
163
+ let t = Array.from(S.current?.querySelectorAll("[role=\"menuitem\"]:not([aria-disabled=\"true\"])") ?? []);
162
164
  if (t.length !== 0) switch (e.key) {
163
165
  case "ArrowDown":
164
- e.preventDefault(), _((e) => e < t.length - 1 ? e + 1 : 0);
166
+ e.preventDefault(), v((e) => e < t.length - 1 ? e + 1 : 0);
165
167
  break;
166
168
  case "ArrowUp":
167
- e.preventDefault(), _((e) => e > 0 ? e - 1 : t.length - 1);
169
+ e.preventDefault(), v((e) => e > 0 ? e - 1 : t.length - 1);
168
170
  break;
169
171
  case "Home":
170
- e.preventDefault(), _(0);
172
+ e.preventDefault(), v(0);
173
+ break;
174
+ case "End":
175
+ e.preventDefault(), v(t.length - 1);
171
176
  break;
172
- case "End": e.preventDefault(), _(t.length - 1);
177
+ case "Tab": g();
173
178
  }
174
179
  };
175
180
  return /* @__PURE__ */ h(n, {
176
181
  ...a,
177
- ref: S,
182
+ ref: C,
178
183
  show: d,
179
184
  preset: "fade",
180
185
  id: c,
181
186
  role: "menu",
182
187
  "aria-labelledby": u,
183
188
  className: m(i.content, e === "end" ? i.alignEnd : i.alignStart, t),
184
- onKeyDown: C,
189
+ onKeyDown: w,
185
190
  children: r
186
191
  });
187
192
  });
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../form/FloatButton/FloatButton.cjs"),n=require("./speed-dial.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(({actions:e,icon:o=`PlusIcon`,activeIcon:s=`CloseIcon`,direction:c=`up`,trigger:l=`hover`,open:u,onOpenChange:d,className:f,"aria-label":p,...m},h)=>{let[g,_]=(0,r.useState)(!1),v=u??g,y=e=>{_(e),d?.(e)},b=()=>{l===`hover`&&y(!0)},x=()=>{l===`hover`&&y(!1)},S=()=>{l===`click`&&y(!v)};return(0,a.jsxs)(`div`,{ref:h,className:(0,i.default)(`wim-speed-dial`,n.default.root,n.default[c],v&&n.default.open,f),onMouseEnter:b,onMouseLeave:x,...m,children:[(0,a.jsx)(`div`,{className:n.default.actions,children:e.map((e,r)=>(0,a.jsx)(`div`,{className:n.default.actionWrapper,style:{transitionDelay:v?`${r*50}ms`:`0ms`},children:(0,a.jsx)(t.FloatButton,{iconName:e.icon,label:e.label,size:`sm`,intent:e.intent,className:e.className,onClick:()=>{e.onClick?.(),l===`click`&&y(!1)},position:`inline`})},r))}),(0,a.jsx)(t.FloatButton,{iconName:v?s:o,onClick:S,className:n.default.trigger,position:`inline`,"aria-expanded":v,"aria-haspopup":`true`,"aria-label":p})]})});o.displayName=`SpeedDial`,exports.SpeedDial=o;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../i18n/useWimTranslation.cjs"),n=require("../../form/FloatButton/FloatButton.cjs"),r=require("./speed-dial.module.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("classnames");a=e.__toESM(a,1);let o=require("react/jsx-runtime");var s=i.default.forwardRef(({actions:e,icon:s=`PlusIcon`,activeIcon:c=`CloseIcon`,direction:l=`up`,trigger:u=`hover`,open:d,onOpenChange:f,className:p,"aria-label":m,...h},g)=>{let{t:_}=t.useWimTranslation(`common`),[v,y]=(0,i.useState)(!1),b=d??v,x=(0,i.useRef)(null),S=(0,i.useRef)(!1),C=e=>{y(e),f?.(e)},w=()=>{u===`hover`&&C(!0)},T=()=>{u===`hover`&&C(!1)},E=()=>{u===`click`&&C(!b)},D=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),S.current=!b,C(!b))};return(0,i.useEffect)(()=>{b&&S.current&&x.current?.querySelector(`button`)?.focus()},[b]),(0,o.jsxs)(`div`,{ref:g,className:(0,a.default)(`wim-speed-dial`,r.default.root,r.default[l],b&&r.default.open,p),onMouseEnter:w,onMouseLeave:T,onKeyDown:e=>{e.key===`Escape`&&b&&(e.preventDefault(),S.current=!1,C(!1),e.currentTarget.querySelector(`[aria-haspopup]`)?.focus())},onBlur:e=>{S.current&&(e.currentTarget.contains(e.relatedTarget)||(S.current=!1,C(!1)))},...h,children:[(0,o.jsx)(`div`,{ref:x,className:r.default.actions,inert:!b,children:e.map((e,t)=>(0,o.jsx)(`div`,{className:r.default.actionWrapper,style:{transitionDelay:b?`${t*50}ms`:`0ms`},children:(0,o.jsx)(n.FloatButton,{iconName:e.icon,label:e.label,size:`sm`,intent:e.intent,className:e.className,onClick:()=>{e.onClick?.(),u===`click`&&C(!1)},position:`inline`})},t))}),(0,o.jsx)(n.FloatButton,{iconName:b?c:s,onClick:E,className:r.default.trigger,position:`inline`,"aria-expanded":b,"aria-haspopup":`true`,"aria-label":m??_(b?`a11y.close_menu`:`a11y.open_menu`),onKeyDown:D})]})});s.displayName=`SpeedDial`,exports.SpeedDial=s;
@@ -36,7 +36,7 @@ export type SpeedDialProps = React.ComponentPropsWithoutRef<"div"> & {
36
36
  /**
37
37
  * Accessible name for the trigger button.
38
38
  * Lands on the inner `FloatButton`, not on the wrapper `div`.
39
- * Omit to keep the icon-name fallback (`PlusIcon` / `CloseIcon`).
39
+ * Defaults to a translated "Open menu" / "Close menu" (en / ja / pt), following the open state.
40
40
  */
41
41
  "aria-label"?: string;
42
42
  };
@@ -76,7 +76,7 @@ export declare const SpeedDial: React.ForwardRefExoticComponent<Omit<React.Detai
76
76
  /**
77
77
  * Accessible name for the trigger button.
78
78
  * Lands on the inner `FloatButton`, not on the wrapper `div`.
79
- * Omit to keep the icon-name fallback (`PlusIcon` / `CloseIcon`).
79
+ * Defaults to a translated "Open menu" / "Close menu" (en / ja / pt), following the open state.
80
80
  */
81
81
  "aria-label"?: string;
82
82
  } & React.RefAttributes<HTMLDivElement>>;
@@ -1,54 +1,68 @@
1
1
  "use client";
2
- import { FloatButton as e } from "../../form/FloatButton/FloatButton.js";
3
- import t from "./speed-dial.module.js";
4
- import n, { useState as r } from "react";
5
- import i from "classnames";
6
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
2
+ import { useWimTranslation as e } from "../../../i18n/useWimTranslation.js";
3
+ import { FloatButton as t } from "../../form/FloatButton/FloatButton.js";
4
+ import n from "./speed-dial.module.js";
5
+ import r, { useEffect as i, useRef as a, useState as o } from "react";
6
+ import s from "classnames";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
8
  //#region src/components/navigation/SpeedDial/SpeedDial.tsx
8
- var s = n.forwardRef(({ actions: n, icon: s = "PlusIcon", activeIcon: c = "CloseIcon", direction: l = "up", trigger: u = "hover", open: d, onOpenChange: f, className: p, "aria-label": m, ...h }, g) => {
9
- let [_, v] = r(!1), y = d ?? _, b = (e) => {
10
- v(e), f?.(e);
11
- }, x = () => {
12
- u === "hover" && b(!0);
13
- }, S = () => {
14
- u === "hover" && b(!1);
15
- }, C = () => {
16
- u === "click" && b(!y);
9
+ var u = r.forwardRef(({ actions: r, icon: u = "PlusIcon", activeIcon: d = "CloseIcon", direction: f = "up", trigger: p = "hover", open: m, onOpenChange: h, className: g, "aria-label": _, ...v }, y) => {
10
+ let { t: b } = e("common"), [x, S] = o(!1), C = m ?? x, w = a(null), T = a(!1), E = (e) => {
11
+ S(e), h?.(e);
12
+ }, D = () => {
13
+ p === "hover" && E(!0);
14
+ }, O = () => {
15
+ p === "hover" && E(!1);
16
+ }, k = () => {
17
+ p === "click" && E(!C);
18
+ }, A = (e) => {
19
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), T.current = !C, E(!C));
17
20
  };
18
- return /* @__PURE__ */ o("div", {
19
- ref: g,
20
- className: i("wim-speed-dial", t.root, t[l], y && t.open, p),
21
- onMouseEnter: x,
22
- onMouseLeave: S,
23
- ...h,
24
- children: [/* @__PURE__ */ a("div", {
25
- className: t.actions,
26
- children: n.map((n, r) => /* @__PURE__ */ a("div", {
27
- className: t.actionWrapper,
28
- style: { transitionDelay: y ? `${r * 50}ms` : "0ms" },
29
- children: /* @__PURE__ */ a(e, {
30
- iconName: n.icon,
31
- label: n.label,
21
+ return i(() => {
22
+ C && T.current && w.current?.querySelector("button")?.focus();
23
+ }, [C]), /* @__PURE__ */ l("div", {
24
+ ref: y,
25
+ className: s("wim-speed-dial", n.root, n[f], C && n.open, g),
26
+ onMouseEnter: D,
27
+ onMouseLeave: O,
28
+ onKeyDown: (e) => {
29
+ e.key === "Escape" && C && (e.preventDefault(), T.current = !1, E(!1), e.currentTarget.querySelector("[aria-haspopup]")?.focus());
30
+ },
31
+ onBlur: (e) => {
32
+ T.current && (e.currentTarget.contains(e.relatedTarget) || (T.current = !1, E(!1)));
33
+ },
34
+ ...v,
35
+ children: [/* @__PURE__ */ c("div", {
36
+ ref: w,
37
+ className: n.actions,
38
+ inert: !C,
39
+ children: r.map((e, r) => /* @__PURE__ */ c("div", {
40
+ className: n.actionWrapper,
41
+ style: { transitionDelay: C ? `${r * 50}ms` : "0ms" },
42
+ children: /* @__PURE__ */ c(t, {
43
+ iconName: e.icon,
44
+ label: e.label,
32
45
  size: "sm",
33
- intent: n.intent,
34
- className: n.className,
46
+ intent: e.intent,
47
+ className: e.className,
35
48
  onClick: () => {
36
- n.onClick?.(), u === "click" && b(!1);
49
+ e.onClick?.(), p === "click" && E(!1);
37
50
  },
38
51
  position: "inline"
39
52
  })
40
53
  }, r))
41
- }), /* @__PURE__ */ a(e, {
42
- iconName: y ? c : s,
43
- onClick: C,
44
- className: t.trigger,
54
+ }), /* @__PURE__ */ c(t, {
55
+ iconName: C ? d : u,
56
+ onClick: k,
57
+ className: n.trigger,
45
58
  position: "inline",
46
- "aria-expanded": y,
59
+ "aria-expanded": C,
47
60
  "aria-haspopup": "true",
48
- "aria-label": m
61
+ "aria-label": _ ?? b(C ? "a11y.close_menu" : "a11y.open_menu"),
62
+ onKeyDown: A
49
63
  })]
50
64
  });
51
65
  });
52
- s.displayName = "SpeedDial";
66
+ u.displayName = "SpeedDial";
53
67
  //#endregion
54
- export { s as SpeedDial };
68
+ export { u as SpeedDial };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("./focus-trap.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=({children:e,active:a=!0,initialFocus:o=!0,className:s})=>{let c=(0,n.useRef)(null),l=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(!a)return;l.current=document.activeElement;let e=c.current;if(!e)return;let t=()=>Array.from(e.querySelectorAll(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)).filter(e=>{let t=window.getComputedStyle(e);return e.tabIndex>=0&&t.display!==`none`&&t.visibility!==`hidden`&&!e.disabled});if(o){let e=t();e.length>0&&e[0].focus()}let n=n=>{if(n.key!==`Tab`)return;let r=t();if(r.length===0){n.preventDefault();return}let i=r[0],a=r[r.length-1],o=document.activeElement;if(!o||!e.contains(o))return;let s=r.indexOf(o);n.shiftKey?(s>=0?s>0:r.some(e=>e.compareDocumentPosition(o)&Node.DOCUMENT_POSITION_FOLLOWING))||(n.preventDefault(),a.focus()):(s>=0?s<r.length-1:r.some(e=>o.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))||(n.preventDefault(),i.focus())};return document.addEventListener(`keydown`,n),()=>{document.removeEventListener(`keydown`,n),l.current&&l.current.focus()}},[a,o]),(0,i.jsx)(`div`,{ref:c,className:(0,r.default)(`wim-focus-trap`,t.default.root,s),children:e})};exports.FocusTrap=a;
2
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("./focus-trap.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=({children:e,active:a=!0,initialFocus:o=!0,className:s})=>{let c=(0,n.useRef)(null),l=(0,n.useRef)(null),u=(0,n.useRef)(!1);return a&&!u.current&&typeof document<`u`?(l.current=document.activeElement,u.current=!0):!a&&u.current&&(u.current=!1),(0,n.useEffect)(()=>{if(!a)return;let e=c.current;if(!e)return;let t=()=>Array.from(e.querySelectorAll(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)).filter(e=>{let t=window.getComputedStyle(e);return e.tabIndex>=0&&t.display!==`none`&&t.visibility!==`hidden`&&!e.disabled});if(o){let e=t();e.length>0&&e[0].focus()}let n=n=>{if(n.key!==`Tab`)return;let r=t();if(r.length===0){n.preventDefault();return}let i=r[0],a=r[r.length-1],o=document.activeElement;if(!o||!e.contains(o))return;let s=r.indexOf(o);n.shiftKey?(s>=0?s>0:r.some(e=>e.compareDocumentPosition(o)&Node.DOCUMENT_POSITION_FOLLOWING))||(n.preventDefault(),a.focus()):(s>=0?s<r.length-1:r.some(e=>o.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))||(n.preventDefault(),i.focus())};return document.addEventListener(`keydown`,n),()=>{document.removeEventListener(`keydown`,n);let e=l.current;e&&e.isConnected&&e.focus()}},[a,o]),(0,i.jsx)(`div`,{ref:c,className:(0,r.default)(`wim-focus-trap`,t.default.root,s),children:e})};exports.FocusTrap=a;
@@ -5,10 +5,9 @@ import r from "classnames";
5
5
  import { jsx as i } from "react/jsx-runtime";
6
6
  //#region src/components/overlay/FocusTrap/FocusTrap.tsx
7
7
  var a = ({ children: a, active: o = !0, initialFocus: s = !0, className: c }) => {
8
- let l = n(null), u = n(null);
9
- return t(() => {
8
+ let l = n(null), u = n(null), d = n(!1);
9
+ return o && !d.current && typeof document < "u" ? (u.current = document.activeElement, d.current = !0) : !o && d.current && (d.current = !1), t(() => {
10
10
  if (!o) return;
11
- u.current = document.activeElement;
12
11
  let e = l.current;
13
12
  if (!e) return;
14
13
  let t = () => Array.from(e.querySelectorAll("button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])")).filter((e) => {
@@ -32,7 +31,9 @@ var a = ({ children: a, active: o = !0, initialFocus: s = !0, className: c }) =>
32
31
  n.shiftKey ? (s >= 0 ? s > 0 : r.some((e) => e.compareDocumentPosition(o) & Node.DOCUMENT_POSITION_FOLLOWING)) || (n.preventDefault(), a.focus()) : (s >= 0 ? s < r.length - 1 : r.some((e) => o.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_FOLLOWING)) || (n.preventDefault(), i.focus());
33
32
  };
34
33
  return document.addEventListener("keydown", n), () => {
35
- document.removeEventListener("keydown", n), u.current && u.current.focus();
34
+ document.removeEventListener("keydown", n);
35
+ let e = u.current;
36
+ e && e.isConnected && e.focus();
36
37
  };
37
38
  }, [o, s]), /* @__PURE__ */ i("div", {
38
39
  ref: l,
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## What this is
6
6
 
7
- **wimui** v0.50.3 — a React 19 component library: 228 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.50.4 — a React 19 component library: 228 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
 
@@ -2160,7 +2160,7 @@ near the right edge pushes the page into a horizontal scroll. Anchor a
2160
2160
  - `onOpenChange: (open: boolean) => void` — Callback when open state changes
2161
2161
  - `aria-label: string` — Accessible name for the trigger button.
2162
2162
  Lands on the inner `FloatButton`, not on the wrapper `div`.
2163
- Omit to keep the icon-name fallback (`PlusIcon` / `CloseIcon`).
2163
+ Defaults to a translated "Open menu" / "Close menu" (en / ja / pt), following the open state.
2164
2164
  - **Stepper** — Visual sequence steps
2165
2165
  - ⚠️ Not the same as elsewhere: In Apple HIG and macOS, a "Stepper" is the control that increments a number — that is `NumberInput` here. WIM's `Stepper` shows progress through a sequence of steps, which is what Material calls a Stepper.
2166
2166
  - `steps: Step[]` = [] — Array of step configurations
package/dist/llms.txt CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## What this is
6
6
 
7
- **wimui** v0.50.3 — a React 19 component library: 228 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.50.4 — a React 19 component library: 228 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