@womp/kookie-ui 0.28.0 → 0.29.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 (58) hide show
  1. package/components.css +246 -42
  2. package/dist/cjs/components/index.js +2 -2
  3. package/dist/cjs/components/index.js.map +3 -3
  4. package/dist/cjs/components/segmented-control.js +1 -1
  5. package/dist/cjs/components/segmented-control.js.map +3 -3
  6. package/dist/cjs/components/segmented-control.props.d.ts +6 -0
  7. package/dist/cjs/components/segmented-control.props.d.ts.map +1 -1
  8. package/dist/cjs/components/segmented-control.props.js +1 -1
  9. package/dist/cjs/components/segmented-control.props.js.map +3 -3
  10. package/dist/cjs/components/text-field.d.ts +11 -3
  11. package/dist/cjs/components/text-field.d.ts.map +1 -1
  12. package/dist/cjs/components/text-field.js +2 -2
  13. package/dist/cjs/components/text-field.js.map +3 -3
  14. package/dist/cjs/components/text-field.props.d.ts +30 -1
  15. package/dist/cjs/components/text-field.props.d.ts.map +1 -1
  16. package/dist/cjs/components/text-field.props.js +1 -1
  17. package/dist/cjs/components/text-field.props.js.map +3 -3
  18. package/dist/cjs/index.js +4 -4
  19. package/dist/cjs/index.js.map +3 -3
  20. package/dist/cjs/props/index.js +1 -1
  21. package/dist/cjs/props/index.js.map +3 -3
  22. package/dist/esm/chunk-A252TSYI.js +2 -0
  23. package/dist/esm/chunk-A252TSYI.js.map +7 -0
  24. package/dist/esm/chunk-FIMFM25N.js +2 -0
  25. package/dist/esm/chunk-FIMFM25N.js.map +7 -0
  26. package/dist/esm/chunk-GPZHRZBE.js +6 -0
  27. package/dist/esm/chunk-GPZHRZBE.js.map +7 -0
  28. package/dist/esm/chunk-TSS4K2U5.js +3 -0
  29. package/dist/esm/{chunk-W4Z6ORYO.js.map → chunk-TSS4K2U5.js.map} +3 -3
  30. package/dist/esm/components/index.js +1 -1
  31. package/dist/esm/components/segmented-control.js +1 -1
  32. package/dist/esm/components/segmented-control.props.d.ts +6 -0
  33. package/dist/esm/components/segmented-control.props.d.ts.map +1 -1
  34. package/dist/esm/components/segmented-control.props.js +1 -1
  35. package/dist/esm/components/text-field.d.ts +11 -3
  36. package/dist/esm/components/text-field.d.ts.map +1 -1
  37. package/dist/esm/components/text-field.js +1 -1
  38. package/dist/esm/components/text-field.props.d.ts +30 -1
  39. package/dist/esm/components/text-field.props.d.ts.map +1 -1
  40. package/dist/esm/components/text-field.props.js +1 -1
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/props/index.js +1 -1
  43. package/package.json +1 -1
  44. package/src/components/segmented-control.css +43 -0
  45. package/src/components/segmented-control.props.tsx +5 -0
  46. package/src/components/shell.css +7 -7
  47. package/src/components/sidebar.css +22 -9
  48. package/src/components/text-field.css +138 -0
  49. package/src/components/text-field.props.tsx +16 -1
  50. package/src/components/text-field.tsx +48 -4
  51. package/styles.css +246 -42
  52. package/dist/esm/chunk-2ZLMWYJ6.js +0 -2
  53. package/dist/esm/chunk-2ZLMWYJ6.js.map +0 -7
  54. package/dist/esm/chunk-BP64M73W.js +0 -2
  55. package/dist/esm/chunk-BP64M73W.js.map +0 -7
  56. package/dist/esm/chunk-W4Z6ORYO.js +0 -3
  57. package/dist/esm/chunk-ZOUIIO4C.js +0 -6
  58. package/dist/esm/chunk-ZOUIIO4C.js.map +0 -7
@@ -0,0 +1,2 @@
1
+ import{b as e}from"./chunk-KRJTW535.js";var o=["1","2","3","4"],t=["horizontal","vertical"],s=["soft","raised","outline"],r={disabled:{type:"boolean",default:!1},size:{type:"enum",className:"kui-r-size",values:o,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:s,default:"soft"},orientation:{type:"enum",className:"kui-r-orientation",values:t,default:"horizontal",responsive:!0},...e};export{r as a};
2
+ //# sourceMappingURL=chunk-A252TSYI.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/segmented-control.props.tsx"],
4
+ "sourcesContent": ["import { radiusPropDef } from '../props/radius.prop.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4'] as const;\nconst orientations = ['horizontal', 'vertical'] as const;\n// soft is a filled track. raised and outline match the TextField variants of the same name, for\n// panels where every other control is raised or outlined.\nconst variants = ['soft', 'raised', 'outline'] as const;\n\nconst segmentedControlRootPropDefs = {\n disabled: { type: 'boolean', default: false },\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'soft' },\n orientation: {\n type: 'enum',\n className: 'kui-r-orientation',\n values: orientations,\n default: 'horizontal',\n responsive: true,\n },\n ...radiusPropDef,\n} satisfies {\n disabled?: PropDef<boolean>;\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n orientation: PropDef<(typeof orientations)[number]>;\n};\n\nexport { segmentedControlRootPropDefs };\n"],
5
+ "mappings": "wCAIA,IAAMA,EAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3BC,EAAe,CAAC,aAAc,UAAU,EAGxCC,EAAW,CAAC,OAAQ,SAAU,SAAS,EAEvCC,EAA+B,CACnC,SAAU,CAAE,KAAM,UAAW,QAAS,EAAM,EAC5C,KAAM,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQH,EAAO,QAAS,IAAK,WAAY,EAAK,EAC7F,QAAS,CAAE,KAAM,OAAQ,UAAW,cAAe,OAAQE,EAAU,QAAS,MAAO,EACrF,YAAa,CACX,KAAM,OACN,UAAW,oBACX,OAAQD,EACR,QAAS,aACT,WAAY,EACd,EACA,GAAGG,CACL",
6
+ "names": ["sizes", "orientations", "variants", "segmentedControlRootPropDefs", "radiusPropDef"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as r}from"./chunk-P7VSZYG3.js";import{a as t}from"./chunk-UMYPLUG3.js";import{b as s}from"./chunk-KRJTW535.js";import{c as e}from"./chunk-CUNKWFKA.js";var o=["1","2","3","4"],a=["raised","surface","soft","ghost","outline"],d={size:{type:"enum",className:"kui-r-size",values:o,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:a,default:"raised"},error:{type:"boolean",default:!1},errorMessage:{type:"string",default:void 0},required:{type:"boolean",default:!1},"aria-describedby":{type:"string",default:void 0},"aria-labelledby":{type:"string",default:void 0},...e,...s},i=["raised","surface","soft","outline","ghost"],b={size:{type:"enum",className:"kui-r-size",values:o,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:i,default:"raised"},disabled:{type:"boolean",default:!1},...e,...s},p=["left","right"],c={side:{type:"enum",values:p},...e,gap:t.gap,px:r.px,pl:r.pl,pr:r.pr};export{d as a,b,c};
2
+ //# sourceMappingURL=chunk-FIMFM25N.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/text-field.props.tsx"],
4
+ "sourcesContent": ["import { colorPropDef } from '../props/color.prop.js';\nimport { paddingPropDefs } from '../props/padding.props.js';\nimport { radiusPropDef } from '../props/radius.prop.js';\nimport { flexPropDefs } from './flex.props.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4'] as const;\nconst variants = ['raised', 'surface', 'soft', 'ghost', 'outline'] as const;\n\nconst textFieldRootPropDefs = {\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'raised' },\n // Error and validation props\n error: { type: 'boolean', default: false },\n errorMessage: { type: 'string', default: undefined },\n required: { type: 'boolean', default: false },\n // Accessibility props\n 'aria-describedby': { type: 'string', default: undefined },\n 'aria-labelledby': { type: 'string', default: undefined },\n ...colorPropDef,\n ...radiusPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n error: PropDef<boolean>;\n errorMessage: PropDef<string | undefined>;\n required: PropDef<boolean>;\n 'aria-describedby': PropDef<string | undefined>;\n 'aria-labelledby': PropDef<string | undefined>;\n};\n\n// Ghost is the dividers alone: no fill, no edge.\nconst groupVariants = ['raised', 'surface', 'soft', 'outline', 'ghost'] as const;\n\nconst textFieldGroupPropDefs = {\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: groupVariants, default: 'raised' },\n disabled: { type: 'boolean', default: false },\n ...colorPropDef,\n ...radiusPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof groupVariants)[number]>;\n disabled: PropDef<boolean>;\n};\n\nconst sides = ['left', 'right'] as const;\n\nconst textFieldSlotPropDefs = {\n side: { type: 'enum', values: sides },\n ...colorPropDef,\n gap: flexPropDefs.gap,\n px: paddingPropDefs.px,\n pl: paddingPropDefs.pl,\n pr: paddingPropDefs.pr,\n} satisfies {\n side: PropDef<(typeof sides)[number]>;\n gap: typeof flexPropDefs.gap;\n px: typeof paddingPropDefs.px;\n pl: typeof paddingPropDefs.pl;\n pr: typeof paddingPropDefs.pr;\n};\n\n/** Scrubbing props for TextField.Slot - handled separately from PropDef system */\ninterface TextFieldSlotScrubProps {\n /** Enable scrubbing behavior on this slot */\n scrub?: boolean;\n /** Current value (required for min/max clamping to work correctly) */\n scrubValue?: number;\n /** Base value change per movement unit (default: 1) */\n scrubStep?: number;\n /** Pixels of movement per step - higher = less sensitive (default: 1) */\n scrubSensitivity?: number;\n /** Minimum allowed value */\n scrubMin?: number;\n /** Maximum allowed value */\n scrubMax?: number;\n /** Step multiplier when Shift is held (default: 10) */\n scrubShiftMultiplier?: number;\n /** Step multiplier when Alt/Option is held (default: 0.1) */\n scrubAltMultiplier?: number;\n /**\n * Callback fired during scrubbing with the value delta\n * @param delta - The change in value\n * @param isChanging - true while dragging, false when released\n */\n onScrub?: (delta: number, isChanging: boolean) => void;\n}\n\nexport type { TextFieldSlotScrubProps };\n\nexport { textFieldRootPropDefs, textFieldGroupPropDefs, textFieldSlotPropDefs };\n"],
5
+ "mappings": "gKAOA,IAAMA,EAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3BC,EAAW,CAAC,SAAU,UAAW,OAAQ,QAAS,SAAS,EAE3DC,EAAwB,CAC5B,KAAM,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQF,EAAO,QAAS,IAAK,WAAY,EAAK,EAC7F,QAAS,CAAE,KAAM,OAAQ,UAAW,cAAe,OAAQC,EAAU,QAAS,QAAS,EAEvF,MAAO,CAAE,KAAM,UAAW,QAAS,EAAM,EACzC,aAAc,CAAE,KAAM,SAAU,QAAS,MAAU,EACnD,SAAU,CAAE,KAAM,UAAW,QAAS,EAAM,EAE5C,mBAAoB,CAAE,KAAM,SAAU,QAAS,MAAU,EACzD,kBAAmB,CAAE,KAAM,SAAU,QAAS,MAAU,EACxD,GAAGE,EACH,GAAGC,CACL,EAWMC,EAAgB,CAAC,SAAU,UAAW,OAAQ,UAAW,OAAO,EAEhEC,EAAyB,CAC7B,KAAM,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQN,EAAO,QAAS,IAAK,WAAY,EAAK,EAC7F,QAAS,CAAE,KAAM,OAAQ,UAAW,cAAe,OAAQK,EAAe,QAAS,QAAS,EAC5F,SAAU,CAAE,KAAM,UAAW,QAAS,EAAM,EAC5C,GAAGF,EACH,GAAGC,CACL,EAMMG,EAAQ,CAAC,OAAQ,OAAO,EAExBC,EAAwB,CAC5B,KAAM,CAAE,KAAM,OAAQ,OAAQD,CAAM,EACpC,GAAGJ,EACH,IAAKM,EAAa,IAClB,GAAIC,EAAgB,GACpB,GAAIA,EAAgB,GACpB,GAAIA,EAAgB,EACtB",
6
+ "names": ["sizes", "variants", "textFieldRootPropDefs", "colorPropDef", "radiusPropDef", "groupVariants", "textFieldGroupPropDefs", "sides", "textFieldSlotPropDefs", "flexPropDefs", "paddingPropDefs"]
7
+ }
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import{a as me}from"./chunk-YCLPURTD.js";import{a as K}from"./chunk-OAJ5DARR.js";import{b as fe,c as U}from"./chunk-OKQAVYW4.js";import{c as ie}from"./chunk-5ON3XLRD.js";import{c as j}from"./chunk-HBWBPBSA.js";import{b as ne}from"./chunk-XU74PNM2.js";import{a as Ee}from"./chunk-VQPANPMI.js";var ze={};Ee(ze,{Group:()=>he,Root:()=>ge,Slot:()=>Se});import*as e from"react";import*as Pe from"react-dom";import Z from"classnames";import{composeEventHandlers as $,composeRefs as ye,useLayoutEffect as Ge}from"radix-ui/internal";var be=["1","2","3","4"],Le=["raised","surface","soft","ghost","outline"],ae={size:{type:"enum",className:"kui-r-size",values:be,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:Le,default:"raised"},error:{type:"boolean",default:!1},errorMessage:{type:"string",default:void 0},required:{type:"boolean",default:!1},"aria-describedby":{type:"string",default:void 0},"aria-labelledby":{type:"string",default:void 0},...j,...ne},Ie=["raised","surface","soft","outline","ghost"],le={size:{type:"enum",className:"kui-r-size",values:be,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:Ie,default:"raised"},disabled:{type:"boolean",default:!1},...j,...ne},Ne=["left","right"],xe={side:{type:"enum",values:Ne},...j,gap:me.gap,px:K.px,pl:K.pl,pr:K.pr};var Re=e.createContext(null),ue="button, a, input, select, textarea, label, [tabindex], [contenteditable]",ve=e.createContext(null),ge=e.forwardRef((a,g)=>{let r=e.useContext(ve),f=r?{...a,size:r.size,variant:r.variant,radius:r.radius,color:a.color??r.color,disabled:!!(r.disabled||a.disabled)}:a,{className:P,style:m,...y}=ie(f,ae.size),b=e.useRef(null),{children:F,className:M,color:w,radius:H,style:k,...l}=U(y,ae),c=!!l.errorMessage,D=e.useId(),[E,L]=e.useState([]),I=e.useCallback(o=>(L(s=>s.includes(o)?s:[...s,o]),()=>L(s=>s.filter(i=>i!==o))),[]),N=e.useMemo(()=>({registerSlot:I}),[I]),{"aria-describedby":G,"aria-labelledby":C,"aria-invalid":h}=l,x=!!l.error||h===!0||h==="true",z=e.useMemo(()=>{let o=[];return l.errorMessage&&o.push(D),G&&o.push(G),o.push(...E),o.length>0?o.join(" "):void 0},[l.errorMessage,G,D,E]),J=e.useMemo(()=>({"aria-invalid":x?!0:h,"aria-describedby":z,"aria-labelledby":C}),[x,h,z,C]),{error:u,errorMessage:B,required:X,"aria-describedby":ce,"aria-labelledby":Q,...V}=l,O=e.useCallback(o=>{let s=o.target;if(s.closest(ue))return;let i=b.current;if(!i)return;let S=s.closest(`
3
+ .kui-TextFieldSlot[data-side='right'],
4
+ .kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])
5
+ `)?i.value.length:0;o.preventDefault(),i.focus();try{i.setSelectionRange(S,S)}catch{}},[]),R=e.createElement("div",{"data-accent-color":w,"data-radius":H,style:c?k:fe(k,m),className:Z("kui-TextFieldRoot",M,!c&&P,{"kui-error":x}),onMouseDown:O},e.createElement("input",{...V,required:X||void 0,...J,ref:ye(b,g),className:"kui-reset kui-TextFieldInput"}),e.createElement(Re.Provider,{value:N},F));return e.createElement("div",{className:Z("kui-TextFieldWrapper",c&&P),style:c?m:void 0,"data-message":c||void 0},R,c?e.createElement("div",{id:D,className:"kui-TextFieldErrorMessage",role:"alert"},l.errorMessage):null)});ge.displayName="TextField.Root";var he=e.forwardRef((a,g)=>{let r=ie(a,le.size),{size:f,variant:P,radius:m,color:y,disabled:b}=r,{className:F,children:M,radius:w,color:H,disabled:k,...l}=U(r,le),c=e.useMemo(()=>({size:f,variant:P,radius:m,color:y,disabled:b}),[f,P,m,y,b]);return e.createElement("div",{role:"group","data-accent-color":y,"data-radius":m,"data-disabled":b||void 0,...l,ref:g,className:Z("kui-TextFieldGroup",F)},e.createElement(ve.Provider,{value:c},M))});he.displayName="TextField.Group";var T=(()=>{if(typeof navigator>"u")return!1;let a=navigator.userAgent,g=/^((?!chrome|android).)*safari/i.test(a),r=/firefox/i.test(a);return g||r})(),Se=e.forwardRef((a,g)=>{let{scrub:r,scrubValue:f,scrubStep:P=1,scrubSensitivity:m=1,scrubMin:y,scrubMax:b,scrubShiftMultiplier:F=10,scrubAltMultiplier:M=.1,onScrub:w,...H}=a,{className:k,color:l,side:c,onPointerDown:D,onPointerMove:E,onPointerUp:L,onLostPointerCapture:I,...N}=U(H,xe),G=e.useId(),C=N.id??G,h=e.useContext(Re)?.registerSlot,x=e.useRef(null),[z,J]=e.useState(null);Ge(()=>{let t=!!x.current?.querySelector(ue);J(n=>n===t?n:t)}),e.useEffect(()=>z===!1?h?.(C):void 0,[h,C,z]);let[u,B]=e.useState(!1),[X,ce]=e.useState({x:0,y:0}),Q=e.useRef(null),V=e.useRef(0),O=e.useRef(!1),R=e.useRef(0),o=e.useRef(0),s=e.useRef(0),i=e.useRef(null),A=e.useRef(0),S=e.useRef({scrubValue:f,scrubStep:P,scrubSensitivity:m,scrubMin:y,scrubMax:b,scrubShiftMultiplier:F,scrubAltMultiplier:M,onScrub:w});S.current={scrubValue:f,scrubStep:P,scrubSensitivity:m,scrubMin:y,scrubMax:b,scrubShiftMultiplier:F,scrubAltMultiplier:M,onScrub:w};let Te=e.useCallback(t=>{if(!r||t.target.closest(ue))return;t.preventDefault(),R.current=0,o.current=f??0,s.current=t.clientX,V.current=t.clientY,ce({x:t.clientX,y:t.clientY});let d=x.current;d&&(T?(i.current=t.pointerId,A.current=t.clientX,d.setPointerCapture(t.pointerId),B(!0)):(O.current=!0,d.requestPointerLock()))},[r,f]);e.useEffect(()=>{if(T||!r)return;let t=()=>{if(!O.current)return;let n=document.pointerLockElement===x.current;B(n),n||(O.current=!1,S.current.onScrub?.(0,!1),R.current=0,o.current=0)};return document.addEventListener("pointerlockchange",t),()=>{document.removeEventListener("pointerlockchange",t)}},[r]);let W=e.useCallback((t,n,d,we)=>{let p=S.current,q=window.innerWidth,Y=window.innerHeight;s.current+=t,s.current>q?s.current=s.current%q:s.current<0&&(s.current=q+s.current%q);let v=V.current+n;v>Y?v=v%Y:v<0&&(v=Y+v%Y),V.current=v;let ee=Q.current;ee&&(ee.style.left=`${s.current}px`,ee.style.top=`${v}px`),R.current+=t;let te=R.current/p.scrubSensitivity;if(Math.abs(te)>=1){let re=1;d?re=p.scrubShiftMultiplier:we&&(re=p.scrubAltMultiplier);let de=Math.trunc(te),oe=de*p.scrubStep*re,se=oe;if(p.scrubMin!==void 0||p.scrubMax!==void 0){let ke=o.current+oe,pe=Math.max(p.scrubMin??-1/0,Math.min(p.scrubMax??1/0,ke));se=pe-o.current,o.current=pe}else o.current+=oe;se!==0&&p.onScrub?.(se,!0),R.current=(te-de)*p.scrubSensitivity}},[]),_=e.useCallback(()=>{S.current.onScrub?.(0,!1),R.current=0,o.current=0,i.current=null,B(!1)},[]),Fe=e.useCallback(t=>{if(!u||!T)return;let n=t.clientX-A.current;A.current=t.clientX,W(n,t.movementY,t.shiftKey,t.altKey)},[u,W]),Me=e.useCallback(t=>{if(!T||i.current!==t.pointerId)return;let n=x.current;n&&i.current!==null&&n.releasePointerCapture(i.current),_()},[_]),De=e.useCallback(()=>{T&&u&&_()},[u,_]);e.useEffect(()=>{if(!u||T)return;let t=d=>{W(d.movementX,d.movementY,d.shiftKey,d.altKey)},n=()=>{document.exitPointerLock()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",n),document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",n),document.body.style.userSelect=""}},[u,W]),e.useEffect(()=>{if(!u||!T)return;let t=document.createElement("style");return t.textContent="* { cursor: none !important; user-select: none !important; }",document.head.appendChild(t),()=>{document.head.removeChild(t)}},[u]);let Ce=u?Pe.createPortal(e.createElement("img",{ref:Q,className:"kui-TextFieldSlotScrubCursor",src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E",alt:"",style:{position:"fixed",left:X.x,top:X.y,transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:99999,width:24,height:24},"aria-hidden":"true"}),document.body):null;return e.createElement("div",{"data-accent-color":l,"data-side":c,"data-scrub":r||void 0,"data-scrubbing":u||void 0,...N,id:C,ref:ye(x,g),className:Z("kui-TextFieldSlot",k),onPointerDown:r?$(D,Te):D,onPointerMove:r?$(E,Fe):E,onPointerUp:r?$(L,Me):L,onLostPointerCapture:r?$(I,De):I},N.children,Ce)});Se.displayName="TextField.Slot";export{ge as a,he as b,Se as c,ze as d};
6
+ //# sourceMappingURL=chunk-GPZHRZBE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/text-field.tsx", "../../src/components/text-field.props.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { composeEventHandlers, composeRefs, useLayoutEffect } from 'radix-ui/internal';\n\nimport { textFieldRootPropDefs, textFieldGroupPropDefs, textFieldSlotPropDefs, type TextFieldSlotScrubProps } from './text-field.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { mergeStyles } from '../helpers/merge-styles.js';\nimport { useThemeSizeProps } from '../hooks/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { NotInputTextualAttributes } from '../helpers/input-attributes.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype TextFieldRootElement = React.ElementRef<'input'>;\ntype TextFieldRootOwnProps = GetPropDefTypes<typeof textFieldRootPropDefs> & {\n defaultValue?: string | number;\n value?: string | number;\n type?: 'date' | 'datetime-local' | 'email' | 'hidden' | 'month' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'time' | 'url' | 'week';\n};\ntype TextFieldInputProps = ComponentPropsWithout<'input', NotInputTextualAttributes | 'color' | 'defaultValue' | 'size' | 'type' | 'value'>;\ninterface TextFieldRootProps extends TextFieldInputProps, TextFieldRootOwnProps {}\n\n// Each Slot registers its id here, so the input can list slot content in aria-describedby.\ntype TextFieldContextValue = { registerSlot: (id: string) => () => void };\nconst TextFieldContext = React.createContext<TextFieldContextValue | null>(null);\n\n// Clicking anything a person could mean to press keeps its own press: the guard is a focusability\n// list, not a tag list. `[tabindex]` catches role-based widgets; `label` already redirects a click.\nconst FOCUSABLE_IN_SLOT = 'button, a, input, select, textarea, label, [tabindex], [contenteditable]';\n\n// A Group decides the look of its fields: their size, variant and radius come from it. A field\n// can still take its own color, and is disabled when either it or the group is.\ntype TextFieldGroupContextValue = Pick<TextFieldGroupOwnProps, 'size' | 'variant' | 'radius' | 'color' | 'disabled'>;\nconst TextFieldGroupContext = React.createContext<TextFieldGroupContextValue | null>(null);\n\nconst TextFieldRoot = React.forwardRef<TextFieldRootElement, TextFieldRootProps>((fieldProps, forwardedRef) => {\n const group = React.useContext(TextFieldGroupContext);\n const ownProps = group\n ? {\n ...fieldProps,\n size: group.size,\n variant: group.variant,\n radius: group.radius,\n color: fieldProps.color ?? group.color,\n disabled: Boolean(group.disabled || fieldProps.disabled),\n }\n : fieldProps;\n // The caller's className and style are kept apart from the size and variant classes: with an\n // error message they go on the wrapper, which is then the one box the parent lays out.\n const { className: ownClassName, style: ownStyle, ...themedProps } = useThemeSizeProps(ownProps, textFieldRootPropDefs.size);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { children, className, color, radius, style, ...inputProps } = extractProps(themedProps, textFieldRootPropDefs);\n const wrapped = Boolean(inputProps.errorMessage);\n\n // Generate unique IDs for accessibility\n const errorId = React.useId();\n\n // Slot content qualifies the value, so it describes the input (as in v2), in mount order.\n const [slotIds, setSlotIds] = React.useState<string[]>([]);\n const registerSlot = React.useCallback((id: string) => {\n setSlotIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n return () => setSlotIds((prev) => prev.filter((slotId) => slotId !== id));\n }, []);\n const contextValue = React.useMemo(() => ({ registerSlot }), [registerSlot]);\n\n const { 'aria-describedby': ariaDescribedby, 'aria-labelledby': ariaLabelledby, 'aria-invalid': ariaInvalid } = inputProps;\n\n // Invalid when `error` is set or the caller passes aria-invalid; the CSS keys on aria-invalid only.\n const isInvalid = Boolean(inputProps.error) || ariaInvalid === true || ariaInvalid === 'true';\n\n // Build aria-describedby string. The caller's ids stay; ours are appended.\n const describedBy = React.useMemo(() => {\n const parts = [];\n if (inputProps.errorMessage) parts.push(errorId);\n if (ariaDescribedby) parts.push(ariaDescribedby);\n parts.push(...slotIds);\n return parts.length > 0 ? parts.join(' ') : undefined;\n }, [inputProps.errorMessage, ariaDescribedby, errorId, slotIds]);\n\n // Build aria attributes\n const ariaProps = React.useMemo(\n () => ({\n 'aria-invalid': isInvalid ? true : ariaInvalid,\n 'aria-describedby': describedBy,\n 'aria-labelledby': ariaLabelledby,\n }),\n [isInvalid, ariaInvalid, describedBy, ariaLabelledby],\n );\n\n // Filter out our custom props to avoid DOM warnings\n const { error, errorMessage, required, 'aria-describedby': _ariaDescribedby, 'aria-labelledby': _ariaLabelledby, ...nativeInputProps } = inputProps;\n\n // Clicking the padding or a passive slot focuses the input. preventDefault stops the browser\n // from moving focus to the root first, so the input is focused once, synchronously.\n const handleMouseDown = React.useCallback((event: React.MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target.closest(FOCUSABLE_IN_SLOT)) return;\n\n const input = inputRef.current;\n if (!input) return;\n\n // Same selector as in the CSS to find the right slot\n const isRightSlot = target.closest(`\n .kui-TextFieldSlot[data-side='right'],\n .kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])\n `);\n\n const cursorPosition = isRightSlot ? input.value.length : 0;\n\n event.preventDefault();\n input.focus();\n // Only some input types support this, browsers will throw an error if not supported\n // See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange#:~:text=Note%20that%20according,not%20support%20selection%22.\n try {\n input.setSelectionRange(cursorPosition, cursorPosition);\n } catch {}\n }, []);\n\n // A pointer-only hit-target redirect to the input; keyboard users reach the input directly.\n const field = (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n data-accent-color={color}\n data-radius={radius}\n style={wrapped ? style : mergeStyles(style, ownStyle)}\n className={classNames('kui-TextFieldRoot', className, !wrapped && ownClassName, {\n // Not used by the library's CSS (invalid styling keys on aria-invalid); kept as a hook for app styles.\n 'kui-error': isInvalid,\n })}\n onMouseDown={handleMouseDown}\n >\n <input {...nativeInputProps} required={required || undefined} {...ariaProps} ref={composeRefs(inputRef, forwardedRef)} className=\"kui-reset kui-TextFieldInput\" />\n <TextFieldContext.Provider value={contextValue}>{children}</TextFieldContext.Provider>\n </div>\n );\n // The wrapper is always there, so a message coming or going never moves the field in the tree:\n // moving it would remount the input, dropping focus, the caret and an uncontrolled value. With\n // no message it is `display: contents` and the field is the box the parent lays out; with one\n // it holds the field and the message below it, and the caller's className and style size the pair.\n return (\n <div className={classNames('kui-TextFieldWrapper', wrapped && ownClassName)} style={wrapped ? ownStyle : undefined} data-message={wrapped || undefined}>\n {field}\n {wrapped ? (\n <div id={errorId} className=\"kui-TextFieldErrorMessage\" role=\"alert\">\n {inputProps.errorMessage}\n </div>\n ) : null}\n </div>\n );\n});\nTextFieldRoot.displayName = 'TextField.Root';\n\ntype TextFieldGroupOwnProps = GetPropDefTypes<typeof textFieldGroupPropDefs>;\ninterface TextFieldGroupProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldGroupOwnProps {}\n\n/**\n * Joins two or more fields into one, such as X, Y and Z: one edge, square inner corners and a\n * hairline between the fields. The group draws the edge, so each field keeps only its fill.\n */\nconst TextFieldGroup = React.forwardRef<HTMLDivElement, TextFieldGroupProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, textFieldGroupPropDefs.size);\n const { size, variant, radius, color, disabled } = props;\n const { className, children, radius: _radius, color: _color, disabled: _disabled, ...domProps } = extractProps(props, textFieldGroupPropDefs);\n const contextValue = React.useMemo(() => ({ size, variant, radius, color, disabled }), [size, variant, radius, color, disabled]);\n return (\n <div\n role=\"group\"\n data-accent-color={color}\n data-radius={radius}\n data-disabled={disabled || undefined}\n {...domProps}\n ref={forwardedRef}\n className={classNames('kui-TextFieldGroup', className)}\n >\n <TextFieldGroupContext.Provider value={contextValue}>{children}</TextFieldGroupContext.Provider>\n </div>\n );\n});\nTextFieldGroup.displayName = 'TextField.Group';\n\ntype TextFieldSlotElement = React.ElementRef<'div'>;\ntype TextFieldSlotOwnProps = GetPropDefTypes<typeof textFieldSlotPropDefs> & TextFieldSlotScrubProps;\ninterface TextFieldSlotProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldSlotOwnProps {}\n\n// Detect if we should use pointer capture instead of pointer lock\n// Safari and Firefox show intrusive browser warnings with pointer lock\nconst usePointerCapture = (() => {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isFirefox = /firefox/i.test(ua);\n return isSafari || isFirefox;\n})();\n\nconst TextFieldSlot = React.forwardRef<TextFieldSlotElement, TextFieldSlotProps>((props, forwardedRef) => {\n // Extract scrub props first (not part of PropDef system)\n const { scrub, scrubValue, scrubStep = 1, scrubSensitivity = 1, scrubMin, scrubMax, scrubShiftMultiplier = 10, scrubAltMultiplier = 0.1, onScrub, ...restProps } = props;\n\n // Then extract styling props\n const { className, color, side, onPointerDown, onPointerMove, onPointerUp, onLostPointerCapture, ...slotProps } = extractProps(\n restProps,\n textFieldSlotPropDefs,\n );\n\n // A slot of text describes the input (see TextFieldRoot); a caller's own id is kept. A slot\n // holding a control, such as a show-password button, does not: the input would be described\n // by the button's name.\n const generatedId = React.useId();\n const slotId = slotProps.id ?? generatedId;\n const registerSlot = React.useContext(TextFieldContext)?.registerSlot;\n const slotRef = React.useRef<HTMLDivElement>(null);\n // Unknown until the slot has rendered; it registers once it is known to hold only text.\n const [holdsControl, setHoldsControl] = React.useState<boolean | null>(null);\n useLayoutEffect(() => {\n const next = Boolean(slotRef.current?.querySelector(FOCUSABLE_IN_SLOT));\n setHoldsControl((prev) => (prev === next ? prev : next));\n });\n React.useEffect(() => (holdsControl === false ? registerSlot?.(slotId) : undefined), [registerSlot, slotId, holdsControl]);\n\n const [isScrubbing, setIsScrubbing] = React.useState(false);\n // Where the virtual cursor starts. Movement is written straight to the cursor element, so a\n // scrub does not re-render the slot on every mouse move.\n const [cursorStart, setCursorStart] = React.useState({ x: 0, y: 0 });\n const cursorRef = React.useRef<HTMLImageElement>(null);\n // Virtual cursor Y, tracked beside virtualX\n const virtualY = React.useRef(0);\n // Whether this slot asked for the pointer lock, so a lock change elsewhere is not ours\n const lockedByMe = React.useRef(false);\n\n // Track accumulated sub-step movement for precision\n const accumulatedMovement = React.useRef(0);\n // Track current value for clamping (initialized to scrubValue when scrubbing starts)\n const currentValue = React.useRef(0);\n // Track virtual X position for wrap-around (separate from rendered position)\n const virtualX = React.useRef(0);\n // Track pointer ID for capture mode\n const pointerIdRef = React.useRef<number | null>(null);\n // Track last X position for capture mode (movementX calculation)\n const lastXRef = React.useRef(0);\n\n // Store scrub config in refs so document handlers can access latest values\n const scrubConfigRef = React.useRef({\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n });\n scrubConfigRef.current = {\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n };\n\n const handlePointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (!scrub) return;\n\n // Don't start scrubbing if clicking on interactive elements\n const target = event.target as HTMLElement;\n if (target.closest(FOCUSABLE_IN_SLOT)) return;\n\n event.preventDefault();\n accumulatedMovement.current = 0;\n // Initialize to current value so min/max clamping works correctly\n currentValue.current = scrubValue ?? 0;\n\n // Initialize virtual cursor at actual mouse position\n virtualX.current = event.clientX;\n virtualY.current = event.clientY;\n setCursorStart({ x: event.clientX, y: event.clientY });\n\n const slot = slotRef.current;\n if (!slot) return;\n\n if (usePointerCapture) {\n // Safari/Firefox: Use pointer capture (no browser warning)\n pointerIdRef.current = event.pointerId;\n lastXRef.current = event.clientX;\n slot.setPointerCapture(event.pointerId);\n setIsScrubbing(true);\n } else {\n // Chrome: Use pointer lock for infinite movement\n lockedByMe.current = true;\n slot.requestPointerLock();\n }\n },\n [scrub, scrubValue],\n );\n\n // Handle pointer lock state changes (Chrome only). Only a scrub slot listens, and only a lock\n // this slot asked for starts or ends its scrub.\n React.useEffect(() => {\n if (usePointerCapture || !scrub) return;\n\n const handlePointerLockChange = () => {\n if (!lockedByMe.current) return;\n const isLocked = document.pointerLockElement === slotRef.current;\n setIsScrubbing(isLocked);\n if (!isLocked) {\n lockedByMe.current = false;\n // Fire callback with isChanging = false when scrubbing ends\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n }\n };\n\n document.addEventListener('pointerlockchange', handlePointerLockChange);\n return () => {\n document.removeEventListener('pointerlockchange', handlePointerLockChange);\n };\n }, [scrub]);\n\n // Shared scrub calculation logic\n const processScrubMovement = React.useCallback((movementX: number, movementY: number, shiftKey: boolean, altKey: boolean) => {\n const config = scrubConfigRef.current;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Update virtual position with wrap-around at viewport edges\n virtualX.current += movementX;\n if (virtualX.current > viewportWidth) {\n virtualX.current = virtualX.current % viewportWidth;\n } else if (virtualX.current < 0) {\n virtualX.current = viewportWidth + (virtualX.current % viewportWidth);\n }\n\n // Also track Y with wrap-around\n let newY = virtualY.current + movementY;\n if (newY > viewportHeight) {\n newY = newY % viewportHeight;\n } else if (newY < 0) {\n newY = viewportHeight + (newY % viewportHeight);\n }\n virtualY.current = newY;\n\n const cursor = cursorRef.current;\n if (cursor) {\n cursor.style.left = `${virtualX.current}px`;\n cursor.style.top = `${newY}px`;\n }\n\n // Accumulate movement for sensitivity calculation\n accumulatedMovement.current += movementX;\n\n // Calculate how many steps we've moved\n const stepsFromMovement = accumulatedMovement.current / config.scrubSensitivity;\n\n if (Math.abs(stepsFromMovement) >= 1) {\n // Determine modifier multiplier\n let multiplier = 1;\n if (shiftKey) {\n multiplier = config.scrubShiftMultiplier;\n } else if (altKey) {\n multiplier = config.scrubAltMultiplier;\n }\n\n // Calculate delta\n const wholeSteps = Math.trunc(stepsFromMovement);\n const delta = wholeSteps * config.scrubStep * multiplier;\n\n // Apply min/max clamping if bounds are set\n let clampedDelta = delta;\n if (config.scrubMin !== undefined || config.scrubMax !== undefined) {\n const newValue = currentValue.current + delta;\n const clampedValue = Math.max(config.scrubMin ?? -Infinity, Math.min(config.scrubMax ?? Infinity, newValue));\n clampedDelta = clampedValue - currentValue.current;\n currentValue.current = clampedValue;\n } else {\n currentValue.current += delta;\n }\n\n // Fire callback with clamped delta (isChanging = true during drag)\n if (clampedDelta !== 0) {\n config.onScrub?.(clampedDelta, true);\n }\n\n // Keep the fractional remainder for smooth sub-pixel accumulation\n accumulatedMovement.current = (stepsFromMovement - wholeSteps) * config.scrubSensitivity;\n }\n }, []);\n\n // End scrubbing helper\n const endScrubbing = React.useCallback(() => {\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n pointerIdRef.current = null;\n setIsScrubbing(false);\n }, []);\n\n // Handle pointer capture mode events (Safari/Firefox)\n const handlePointerMove = React.useCallback(\n (event: React.PointerEvent) => {\n if (!isScrubbing || !usePointerCapture) return;\n\n const movementX = event.clientX - lastXRef.current;\n lastXRef.current = event.clientX;\n\n processScrubMovement(movementX, event.movementY, event.shiftKey, event.altKey);\n },\n [isScrubbing, processScrubMovement],\n );\n\n const handlePointerUp = React.useCallback(\n (event: React.PointerEvent) => {\n if (!usePointerCapture || pointerIdRef.current !== event.pointerId) return;\n\n const slot = slotRef.current;\n if (slot && pointerIdRef.current !== null) {\n slot.releasePointerCapture(pointerIdRef.current);\n }\n endScrubbing();\n },\n [endScrubbing],\n );\n\n const handleLostPointerCapture = React.useCallback(() => {\n if (usePointerCapture && isScrubbing) {\n endScrubbing();\n }\n }, [isScrubbing, endScrubbing]);\n\n // Attach document-level listeners for pointer lock mode (Chrome)\n React.useEffect(() => {\n if (!isScrubbing || usePointerCapture) return;\n\n const handleMouseMove = (event: MouseEvent) => {\n processScrubMovement(event.movementX, event.movementY, event.shiftKey, event.altKey);\n };\n\n const handleMouseUp = () => {\n // Exit pointer lock to end scrubbing\n document.exitPointerLock();\n };\n\n // Use mousemove for pointer lock (pointermove doesn't work well with pointer lock)\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n // Disable text selection during scrubbing\n document.body.style.userSelect = 'none';\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.userSelect = '';\n };\n }, [isScrubbing, processScrubMovement]);\n\n // Hide native cursor and disable text selection during pointer capture scrubbing\n React.useEffect(() => {\n if (!isScrubbing || !usePointerCapture) return;\n\n // Create a style element to hide cursor globally during scrub\n const style = document.createElement('style');\n style.textContent = '* { cursor: none !important; user-select: none !important; }';\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }, [isScrubbing]);\n\n // Render virtual cursor via portal to body so it's not clipped\n // Using a data URI of ew-resize cursor for a native look\n const virtualCursor = isScrubbing\n ? ReactDOM.createPortal(\n <img\n ref={cursorRef}\n className=\"kui-TextFieldSlotScrubCursor\"\n src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E\"\n alt=\"\"\n style={{\n position: 'fixed',\n left: cursorStart.x,\n top: cursorStart.y,\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n zIndex: 99999,\n width: 24,\n height: 24,\n }}\n aria-hidden=\"true\"\n />,\n document.body,\n )\n : null;\n\n return (\n <div\n data-accent-color={color}\n data-side={side}\n data-scrub={scrub || undefined}\n data-scrubbing={isScrubbing || undefined}\n {...slotProps}\n id={slotId}\n ref={composeRefs(slotRef, forwardedRef)}\n className={classNames('kui-TextFieldSlot', className)}\n // The caller's handlers run first; the scrub handlers only when `scrub` is set.\n onPointerDown={scrub ? composeEventHandlers(onPointerDown, handlePointerDown) : onPointerDown}\n onPointerMove={scrub ? composeEventHandlers(onPointerMove, handlePointerMove) : onPointerMove}\n onPointerUp={scrub ? composeEventHandlers(onPointerUp, handlePointerUp) : onPointerUp}\n onLostPointerCapture={scrub ? composeEventHandlers(onLostPointerCapture, handleLostPointerCapture) : onLostPointerCapture}\n >\n {slotProps.children}\n {virtualCursor}\n </div>\n );\n});\nTextFieldSlot.displayName = 'TextField.Slot';\n\nexport { TextFieldRoot as Root, TextFieldGroup as Group, TextFieldSlot as Slot };\nexport type { TextFieldRootProps as RootProps, TextFieldGroupProps as GroupProps, TextFieldSlotProps as SlotProps };\n", "import { colorPropDef } from '../props/color.prop.js';\nimport { paddingPropDefs } from '../props/padding.props.js';\nimport { radiusPropDef } from '../props/radius.prop.js';\nimport { flexPropDefs } from './flex.props.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4'] as const;\nconst variants = ['raised', 'surface', 'soft', 'ghost', 'outline'] as const;\n\nconst textFieldRootPropDefs = {\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'raised' },\n // Error and validation props\n error: { type: 'boolean', default: false },\n errorMessage: { type: 'string', default: undefined },\n required: { type: 'boolean', default: false },\n // Accessibility props\n 'aria-describedby': { type: 'string', default: undefined },\n 'aria-labelledby': { type: 'string', default: undefined },\n ...colorPropDef,\n ...radiusPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n error: PropDef<boolean>;\n errorMessage: PropDef<string | undefined>;\n required: PropDef<boolean>;\n 'aria-describedby': PropDef<string | undefined>;\n 'aria-labelledby': PropDef<string | undefined>;\n};\n\n// Ghost is the dividers alone: no fill, no edge.\nconst groupVariants = ['raised', 'surface', 'soft', 'outline', 'ghost'] as const;\n\nconst textFieldGroupPropDefs = {\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: groupVariants, default: 'raised' },\n disabled: { type: 'boolean', default: false },\n ...colorPropDef,\n ...radiusPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof groupVariants)[number]>;\n disabled: PropDef<boolean>;\n};\n\nconst sides = ['left', 'right'] as const;\n\nconst textFieldSlotPropDefs = {\n side: { type: 'enum', values: sides },\n ...colorPropDef,\n gap: flexPropDefs.gap,\n px: paddingPropDefs.px,\n pl: paddingPropDefs.pl,\n pr: paddingPropDefs.pr,\n} satisfies {\n side: PropDef<(typeof sides)[number]>;\n gap: typeof flexPropDefs.gap;\n px: typeof paddingPropDefs.px;\n pl: typeof paddingPropDefs.pl;\n pr: typeof paddingPropDefs.pr;\n};\n\n/** Scrubbing props for TextField.Slot - handled separately from PropDef system */\ninterface TextFieldSlotScrubProps {\n /** Enable scrubbing behavior on this slot */\n scrub?: boolean;\n /** Current value (required for min/max clamping to work correctly) */\n scrubValue?: number;\n /** Base value change per movement unit (default: 1) */\n scrubStep?: number;\n /** Pixels of movement per step - higher = less sensitive (default: 1) */\n scrubSensitivity?: number;\n /** Minimum allowed value */\n scrubMin?: number;\n /** Maximum allowed value */\n scrubMax?: number;\n /** Step multiplier when Shift is held (default: 10) */\n scrubShiftMultiplier?: number;\n /** Step multiplier when Alt/Option is held (default: 0.1) */\n scrubAltMultiplier?: number;\n /**\n * Callback fired during scrubbing with the value delta\n * @param delta - The change in value\n * @param isChanging - true while dragging, false when released\n */\n onScrub?: (delta: number, isChanging: boolean) => void;\n}\n\nexport type { TextFieldSlotScrubProps };\n\nexport { textFieldRootPropDefs, textFieldGroupPropDefs, textFieldSlotPropDefs };\n"],
5
+ "mappings": "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",
6
+ "names": ["text_field_exports", "__export", "TextFieldGroup", "TextFieldRoot", "TextFieldSlot", "React", "ReactDOM", "classNames", "composeEventHandlers", "composeRefs", "useLayoutEffect", "sizes", "variants", "textFieldRootPropDefs", "colorPropDef", "radiusPropDef", "groupVariants", "textFieldGroupPropDefs", "sides", "textFieldSlotPropDefs", "flexPropDefs", "paddingPropDefs", "TextFieldContext", "FOCUSABLE_IN_SLOT", "TextFieldGroupContext", "TextFieldRoot", "fieldProps", "forwardedRef", "group", "ownProps", "ownClassName", "ownStyle", "themedProps", "useThemeSizeProps", "textFieldRootPropDefs", "inputRef", "children", "className", "color", "radius", "style", "inputProps", "extractProps", "wrapped", "errorId", "slotIds", "setSlotIds", "registerSlot", "id", "prev", "slotId", "contextValue", "ariaDescribedby", "ariaLabelledby", "ariaInvalid", "isInvalid", "describedBy", "parts", "ariaProps", "error", "errorMessage", "required", "_ariaDescribedby", "_ariaLabelledby", "nativeInputProps", "handleMouseDown", "event", "target", "input", "cursorPosition", "field", "mergeStyles", "classNames", "composeRefs", "TextFieldGroup", "props", "textFieldGroupPropDefs", "size", "variant", "disabled", "_radius", "_color", "_disabled", "domProps", "usePointerCapture", "ua", "isSafari", "isFirefox", "TextFieldSlot", "scrub", "scrubValue", "scrubStep", "scrubSensitivity", "scrubMin", "scrubMax", "scrubShiftMultiplier", "scrubAltMultiplier", "onScrub", "restProps", "side", "onPointerDown", "onPointerMove", "onPointerUp", "onLostPointerCapture", "slotProps", "textFieldSlotPropDefs", "generatedId", "slotRef", "holdsControl", "setHoldsControl", "useLayoutEffect", "next", "isScrubbing", "setIsScrubbing", "cursorStart", "setCursorStart", "cursorRef", "virtualY", "lockedByMe", "accumulatedMovement", "currentValue", "virtualX", "pointerIdRef", "lastXRef", "scrubConfigRef", "handlePointerDown", "slot", "handlePointerLockChange", "isLocked", "processScrubMovement", "movementX", "movementY", "shiftKey", "altKey", "config", "viewportWidth", "viewportHeight", "newY", "cursor", "stepsFromMovement", "multiplier", "wholeSteps", "delta", "clampedDelta", "newValue", "clampedValue", "endScrubbing", "handlePointerMove", "handlePointerUp", "handleLostPointerCapture", "handleMouseMove", "handleMouseUp", "virtualCursor", "composeEventHandlers"]
7
+ }
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{c as y}from"./chunk-OKQAVYW4.js";import{c as R}from"./chunk-5ON3XLRD.js";import{b as v}from"./chunk-XU74PNM2.js";import{a as K}from"./chunk-VQPANPMI.js";var B={};K(B,{Item:()=>x,Root:()=>h});import*as e from"react";import S from"classnames";import{ToggleGroup as I}from"radix-ui";import{useComposedRefs as H,useControllableState as j,useLayoutEffect as W}from"radix-ui/internal";var M=["1","2","3","4"],O=["horizontal","vertical"],F=["soft","raised","outline"],u={disabled:{type:"boolean",default:!1},size:{type:"enum",className:"kui-r-size",values:M,default:"2",responsive:!0},variant:{type:"enum",className:"kui-variant",values:F,default:"soft"},orientation:{type:"enum",className:"kui-r-orientation",values:O,default:"horizontal",responsive:!0},...v};var b=e.createContext(null),q=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"]),h=e.forwardRef((n,s)=>{let a=R(n,u.size),{className:l,children:t,radius:i,value:m,defaultValue:p,onValueChange:D,style:w,disabled:c,onKeyDown:N,onPointerDown:k,...T}=y(a,u),[f,d]=j({prop:m,onChange:D,defaultProp:p??""}),r=e.useRef(!1),A=e.useMemo(()=>({selectFromKeyboard(o){r.current&&(r.current=!1,d(o))}}),[d]),g=e.useRef(null),V=H(s,g),P=e.Children.toArray(t).filter(e.isValidElement),z=P.length,G=Math.max(0,P.findIndex(o=>o.props.value===f));return W(()=>{let o=g.current;if(!o)return;let C=Array.from(o.querySelectorAll(":scope > .kui-SegmentedControlItem")),L=C.findIndex(E=>E.getAttribute("data-state")==="on");o.style.setProperty("--segmented-control-count",String(C.length||1)),o.style.setProperty("--segmented-control-index",String(Math.max(0,L)))}),e.createElement(b.Provider,{value:A},e.createElement(I.Root,{"data-disabled":c||void 0,"data-radius":i,ref:V,style:{"--segmented-control-count":z||1,"--segmented-control-index":G,...w},className:S("kui-SegmentedControlRoot",l),onValueChange:o=>{o&&d(o)},onKeyDown:o=>{N?.(o),r.current=q.has(o.key)},onPointerDown:o=>{k?.(o),r.current=!1},...T,type:"single",value:f,asChild:!1,disabled:!!c},t,e.createElement("div",{className:"kui-SegmentedControlIndicator"})))});h.displayName="SegmentedControl.Root";var x=e.forwardRef(({children:n,className:s,iconOnly:a,onFocus:l,...t},i)=>{let m=e.useContext(b);return e.createElement(I.Item,{ref:i,className:S("kui-reset","kui-SegmentedControlItem",s),"data-icon-only":a||void 0,onFocus:p=>{l?.(p),m?.selectFromKeyboard(t.value)},...t,asChild:!1},e.createElement("span",{className:"kui-SegmentedControlItemSeparator"}),e.createElement("span",{className:"kui-SegmentedControlItemLabel"},e.createElement("span",{className:"kui-SegmentedControlItemLabelActive"},n),e.createElement("span",{className:"kui-SegmentedControlItemLabelInactive","aria-hidden":!0},n)))});x.displayName="SegmentedControl.Item";export{h as a,x as b,B as c};
3
+ //# sourceMappingURL=chunk-TSS4K2U5.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/segmented-control.tsx", "../../src/components/segmented-control.props.tsx"],
4
- "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport { useComposedRefs, useControllableState, useLayoutEffect } from 'radix-ui/internal';\n\nimport { segmentedControlRootPropDefs } from './segmented-control.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../hooks/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SegmentedControlRootOwnProps = GetPropDefTypes<typeof segmentedControlRootPropDefs>;\n\ninterface SegmentedControlRootProps extends ComponentPropsWithout<'div', RemovedProps | 'dir'>, SegmentedControlRootOwnProps {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n}\n\n// Arrow keys select as they move focus, as in a radio group. The root marks a key press, and the\n// item that takes focus from it selects itself. A click or Tab focuses without selecting.\nconst SegmentedControlContext = React.createContext<{ selectFromKeyboard(value: string): void } | null>(null);\n\nconst NAVIGATION_KEYS = new Set(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End']);\n\nconst SegmentedControlRoot = React.forwardRef<HTMLDivElement, SegmentedControlRootProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, segmentedControlRootPropDefs.size);\n const {\n className,\n children,\n radius,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange: onValueChangeProp,\n style,\n disabled,\n onKeyDown,\n onPointerDown,\n ...rootProps\n } = extractProps(props, segmentedControlRootPropDefs);\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChangeProp,\n defaultProp: defaultValueProp ?? '',\n });\n\n // The indicator is sized and placed from the item count and the selected index, written\n // as custom properties. They are read from the children on render, so the server markup\n // is right, then corrected from the DOM, which also sees items inside fragments or\n // wrapper components.\n const keyboardNavigationRef = React.useRef(false);\n const context = React.useMemo(\n () => ({\n selectFromKeyboard(itemValue: string) {\n if (!keyboardNavigationRef.current) return;\n keyboardNavigationRef.current = false;\n setValue(itemValue);\n },\n }),\n [setValue],\n );\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(forwardedRef, rootRef);\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const renderedCount = items.length;\n const renderedIndex = Math.max(\n 0,\n items.findIndex((child) => (child.props as { value?: unknown }).value === value),\n );\n useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const domItems = Array.from(root.querySelectorAll(':scope > .kui-SegmentedControlItem'));\n const index = domItems.findIndex((item) => item.getAttribute('data-state') === 'on');\n root.style.setProperty('--segmented-control-count', String(domItems.length || 1));\n root.style.setProperty('--segmented-control-index', String(Math.max(0, index)));\n });\n\n return (\n <SegmentedControlContext.Provider value={context}>\n <ToggleGroupPrimitive.Root\n data-disabled={disabled || undefined}\n data-radius={radius}\n ref={composedRef}\n style={\n {\n '--segmented-control-count': renderedCount || 1,\n '--segmented-control-index': renderedIndex,\n ...style,\n } as React.CSSProperties\n }\n className={classNames('kui-SegmentedControlRoot', className)}\n onValueChange={(value) => {\n if (value) {\n setValue(value);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n keyboardNavigationRef.current = NAVIGATION_KEYS.has(event.key);\n }}\n onPointerDown={(event) => {\n onPointerDown?.(event);\n keyboardNavigationRef.current = false;\n }}\n {...rootProps}\n type=\"single\"\n value={value}\n asChild={false}\n disabled={!!disabled}\n >\n {children}\n <div className=\"kui-SegmentedControlIndicator\" />\n </ToggleGroupPrimitive.Root>\n </SegmentedControlContext.Provider>\n );\n});\n\nSegmentedControlRoot.displayName = 'SegmentedControl.Root';\n\ninterface SegmentedControlItemOwnProps {\n value: string;\n /** When true, this segment can't be selected. */\n disabled?: boolean;\n /** When true, applies fixed square width for icon-only segments */\n iconOnly?: boolean;\n}\n\ninterface SegmentedControlItemProps extends ComponentPropsWithout<typeof ToggleGroupPrimitive.Item, RemovedProps | 'type' | 'value'>, SegmentedControlItemOwnProps {}\n\nconst SegmentedControlItem = React.forwardRef<HTMLButtonElement, SegmentedControlItemProps>(({ children, className, iconOnly, onFocus, ...props }, forwardedRef) => {\n const context = React.useContext(SegmentedControlContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-SegmentedControlItem', className)}\n data-icon-only={iconOnly || undefined}\n onFocus={(event) => {\n onFocus?.(event);\n context?.selectFromKeyboard(props.value);\n }}\n {...props}\n asChild={false}\n >\n <span className=\"kui-SegmentedControlItemSeparator\" />\n <span className=\"kui-SegmentedControlItemLabel\">\n <span className=\"kui-SegmentedControlItemLabelActive\">{children}</span>\n <span className=\"kui-SegmentedControlItemLabelInactive\" aria-hidden>\n {children}\n </span>\n </span>\n </ToggleGroupPrimitive.Item>\n );\n});\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item';\n\nexport { SegmentedControlRoot as Root, SegmentedControlItem as Item };\nexport type { SegmentedControlRootProps as RootProps, SegmentedControlItemProps as ItemProps };\n", "import { radiusPropDef } from '../props/radius.prop.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4'] as const;\nconst orientations = ['horizontal', 'vertical'] as const;\n\nconst segmentedControlRootPropDefs = {\n disabled: { type: 'boolean', default: false },\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n orientation: {\n type: 'enum',\n className: 'kui-r-orientation',\n values: orientations,\n default: 'horizontal',\n responsive: true,\n },\n ...radiusPropDef,\n} satisfies {\n disabled?: PropDef<boolean>;\n size: PropDef<(typeof sizes)[number]>;\n orientation: PropDef<(typeof orientations)[number]>;\n};\n\nexport { segmentedControlRootPropDefs };\n"],
5
- "mappings": "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",
6
- "names": ["segmented_control_exports", "__export", "SegmentedControlItem", "SegmentedControlRoot", "React", "classNames", "ToggleGroupPrimitive", "useComposedRefs", "useControllableState", "useLayoutEffect", "sizes", "orientations", "segmentedControlRootPropDefs", "radiusPropDef", "SegmentedControlContext", "NAVIGATION_KEYS", "SegmentedControlRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "segmentedControlRootPropDefs", "className", "children", "radius", "valueProp", "defaultValueProp", "onValueChangeProp", "style", "disabled", "onKeyDown", "onPointerDown", "rootProps", "extractProps", "value", "setValue", "useControllableState", "keyboardNavigationRef", "context", "itemValue", "rootRef", "composedRef", "useComposedRefs", "items", "renderedCount", "renderedIndex", "child", "useLayoutEffect", "root", "domItems", "index", "item", "ToggleGroupPrimitive", "classNames", "event", "SegmentedControlItem", "iconOnly", "onFocus"]
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport { useComposedRefs, useControllableState, useLayoutEffect } from 'radix-ui/internal';\n\nimport { segmentedControlRootPropDefs } from './segmented-control.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../hooks/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SegmentedControlRootOwnProps = GetPropDefTypes<typeof segmentedControlRootPropDefs>;\n\ninterface SegmentedControlRootProps extends ComponentPropsWithout<'div', RemovedProps | 'dir'>, SegmentedControlRootOwnProps {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n}\n\n// Arrow keys select as they move focus, as in a radio group. The root marks a key press, and the\n// item that takes focus from it selects itself. A click or Tab focuses without selecting.\nconst SegmentedControlContext = React.createContext<{ selectFromKeyboard(value: string): void } | null>(null);\n\nconst NAVIGATION_KEYS = new Set(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End']);\n\nconst SegmentedControlRoot = React.forwardRef<HTMLDivElement, SegmentedControlRootProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, segmentedControlRootPropDefs.size);\n const {\n className,\n children,\n radius,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange: onValueChangeProp,\n style,\n disabled,\n onKeyDown,\n onPointerDown,\n ...rootProps\n } = extractProps(props, segmentedControlRootPropDefs);\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChangeProp,\n defaultProp: defaultValueProp ?? '',\n });\n\n // The indicator is sized and placed from the item count and the selected index, written\n // as custom properties. They are read from the children on render, so the server markup\n // is right, then corrected from the DOM, which also sees items inside fragments or\n // wrapper components.\n const keyboardNavigationRef = React.useRef(false);\n const context = React.useMemo(\n () => ({\n selectFromKeyboard(itemValue: string) {\n if (!keyboardNavigationRef.current) return;\n keyboardNavigationRef.current = false;\n setValue(itemValue);\n },\n }),\n [setValue],\n );\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(forwardedRef, rootRef);\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const renderedCount = items.length;\n const renderedIndex = Math.max(\n 0,\n items.findIndex((child) => (child.props as { value?: unknown }).value === value),\n );\n useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const domItems = Array.from(root.querySelectorAll(':scope > .kui-SegmentedControlItem'));\n const index = domItems.findIndex((item) => item.getAttribute('data-state') === 'on');\n root.style.setProperty('--segmented-control-count', String(domItems.length || 1));\n root.style.setProperty('--segmented-control-index', String(Math.max(0, index)));\n });\n\n return (\n <SegmentedControlContext.Provider value={context}>\n <ToggleGroupPrimitive.Root\n data-disabled={disabled || undefined}\n data-radius={radius}\n ref={composedRef}\n style={\n {\n '--segmented-control-count': renderedCount || 1,\n '--segmented-control-index': renderedIndex,\n ...style,\n } as React.CSSProperties\n }\n className={classNames('kui-SegmentedControlRoot', className)}\n onValueChange={(value) => {\n if (value) {\n setValue(value);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n keyboardNavigationRef.current = NAVIGATION_KEYS.has(event.key);\n }}\n onPointerDown={(event) => {\n onPointerDown?.(event);\n keyboardNavigationRef.current = false;\n }}\n {...rootProps}\n type=\"single\"\n value={value}\n asChild={false}\n disabled={!!disabled}\n >\n {children}\n <div className=\"kui-SegmentedControlIndicator\" />\n </ToggleGroupPrimitive.Root>\n </SegmentedControlContext.Provider>\n );\n});\n\nSegmentedControlRoot.displayName = 'SegmentedControl.Root';\n\ninterface SegmentedControlItemOwnProps {\n value: string;\n /** When true, this segment can't be selected. */\n disabled?: boolean;\n /** When true, applies fixed square width for icon-only segments */\n iconOnly?: boolean;\n}\n\ninterface SegmentedControlItemProps extends ComponentPropsWithout<typeof ToggleGroupPrimitive.Item, RemovedProps | 'type' | 'value'>, SegmentedControlItemOwnProps {}\n\nconst SegmentedControlItem = React.forwardRef<HTMLButtonElement, SegmentedControlItemProps>(({ children, className, iconOnly, onFocus, ...props }, forwardedRef) => {\n const context = React.useContext(SegmentedControlContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-SegmentedControlItem', className)}\n data-icon-only={iconOnly || undefined}\n onFocus={(event) => {\n onFocus?.(event);\n context?.selectFromKeyboard(props.value);\n }}\n {...props}\n asChild={false}\n >\n <span className=\"kui-SegmentedControlItemSeparator\" />\n <span className=\"kui-SegmentedControlItemLabel\">\n <span className=\"kui-SegmentedControlItemLabelActive\">{children}</span>\n <span className=\"kui-SegmentedControlItemLabelInactive\" aria-hidden>\n {children}\n </span>\n </span>\n </ToggleGroupPrimitive.Item>\n );\n});\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item';\n\nexport { SegmentedControlRoot as Root, SegmentedControlItem as Item };\nexport type { SegmentedControlRootProps as RootProps, SegmentedControlItemProps as ItemProps };\n", "import { radiusPropDef } from '../props/radius.prop.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4'] as const;\nconst orientations = ['horizontal', 'vertical'] as const;\n// soft is a filled track. raised and outline match the TextField variants of the same name, for\n// panels where every other control is raised or outlined.\nconst variants = ['soft', 'raised', 'outline'] as const;\n\nconst segmentedControlRootPropDefs = {\n disabled: { type: 'boolean', default: false },\n size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'soft' },\n orientation: {\n type: 'enum',\n className: 'kui-r-orientation',\n values: orientations,\n default: 'horizontal',\n responsive: true,\n },\n ...radiusPropDef,\n} satisfies {\n disabled?: PropDef<boolean>;\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n orientation: PropDef<(typeof orientations)[number]>;\n};\n\nexport { segmentedControlRootPropDefs };\n"],
5
+ "mappings": "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",
6
+ "names": ["segmented_control_exports", "__export", "SegmentedControlItem", "SegmentedControlRoot", "React", "classNames", "ToggleGroupPrimitive", "useComposedRefs", "useControllableState", "useLayoutEffect", "sizes", "orientations", "variants", "segmentedControlRootPropDefs", "radiusPropDef", "SegmentedControlContext", "NAVIGATION_KEYS", "SegmentedControlRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "segmentedControlRootPropDefs", "className", "children", "radius", "valueProp", "defaultValueProp", "onValueChangeProp", "style", "disabled", "onKeyDown", "onPointerDown", "rootProps", "extractProps", "value", "setValue", "useControllableState", "keyboardNavigationRef", "context", "itemValue", "rootRef", "composedRef", "useComposedRefs", "items", "renderedCount", "renderedIndex", "child", "useLayoutEffect", "root", "domItems", "index", "item", "ToggleGroupPrimitive", "classNames", "event", "SegmentedControlItem", "iconOnly", "onFocus"]
7
7
  }
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import"../chunk-NG54K6FL.js";import{a as ma}from"../chunk-7QBNXNEN.js";import{e as $}from"../chunk-REORAMUH.js";import{a as aa}from"../chunk-K3GDM26A.js";import{c as ba}from"../chunk-ZOUIIO4C.js";import{a as ca}from"../chunk-FMVOB367.js";import{a as da,c as ea,d as fa,e as ga,f as ha,g as ia,h as ja,i as ka,j as la}from"../chunk-JTMLFTNZ.js";import{h as oa}from"../chunk-4LV37PHM.js";import{l as na}from"../chunk-2FYUM6TA.js";import{a as Y}from"../chunk-B6OFKABP.js";import{a as Z}from"../chunk-JKQN6QCP.js";import{h as _}from"../chunk-X7JHZ3HA.js";import{c as V}from"../chunk-W4Z6ORYO.js";import{h as W}from"../chunk-VQDCHBZR.js";import{a as X}from"../chunk-324VC67W.js";import{g as pa}from"../chunk-HR2VHGJ5.js";import"../chunk-4G3FJUER.js";import"../chunk-ZG2XQUOH.js";import{a as R}from"../chunk-D2C2A2ZK.js";import{c as S}from"../chunk-HBO7W7SS.js";import{a as T}from"../chunk-H2J25HXP.js";import{a as U}from"../chunk-L66IUPDW.js";import{a as O}from"../chunk-C67MM24U.js";import{i as qa}from"../chunk-MMDZBPSX.js";import{e as P}from"../chunk-NWXODCTD.js";import{a as Q}from"../chunk-AXODGYRY.js";import{n as J}from"../chunk-2S7HPQVX.js";import{g as K}from"../chunk-5BX2YZV6.js";import{o as L}from"../chunk-67UEMB4K.js";import"../chunk-2ACVWLFA.js";import{a as M}from"../chunk-Q5SANVIW.js";import{a as N}from"../chunk-ENQV6SEA.js";import{a as y}from"../chunk-EPGIYTFK.js";import{m as C}from"../chunk-LABMK6Q7.js";import{b as z,c as A}from"../chunk-7V6M3MIR.js";import{c as D}from"../chunk-FYTLUDL3.js";import"../chunk-2VSRZ4IT.js";import{a as E}from"../chunk-JD4KR6VZ.js";import"../chunk-4KIZRO52.js";import{a as F}from"../chunk-J54GYD7A.js";import{a as G}from"../chunk-WD66RYF6.js";import{l as I}from"../chunk-2E57H3NH.js";import{g as H}from"../chunk-MJKVVGGV.js";import{a as B}from"../chunk-WUCBFB25.js";import{a as n}from"../chunk-B6YGNB3V.js";import{f as o}from"../chunk-DP7MPGR7.js";import{h as r}from"../chunk-WAXRIARV.js";import"../chunk-FATCGZZE.js";import"../chunk-7VJF6EXN.js";import{a as p}from"../chunk-JP36JSNP.js";import"../chunk-TGRHRMQI.js";import{a as s}from"../chunk-SUQJ7DD4.js";import{a as t}from"../chunk-HLIOHDEX.js";import{a as u}from"../chunk-XD3C3GVF.js";import{a as x}from"../chunk-KJZSXLIX.js";import"../chunk-Y2DBXOLT.js";import{a as v,b as w}from"../chunk-6YWHNLSC.js";import{a as q}from"../chunk-4MNRLB57.js";import"../chunk-BQC2P3SN.js";import"../chunk-UJ7JERJ5.js";import"../chunk-YMUERC2J.js";import"../chunk-AS2STDGA.js";import"../chunk-2ZKEQS76.js";import{a as d}from"../chunk-BUXK5VGR.js";import{a as c}from"../chunk-KVVRFWGQ.js";import"../chunk-YCLPURTD.js";import"../chunk-CR65RYGM.js";import{a as e,b as f,c as g,d as h}from"../chunk-GKDGNPBD.js";import"../chunk-7N2Q5WOM.js";import"../chunk-OAJ5DARR.js";import{b as a,c as b}from"../chunk-5KMEUZWN.js";import"../chunk-5JYSYTHA.js";import"../chunk-ISCZ57VL.js";import"../chunk-EB4AG3OL.js";import{a as i}from"../chunk-QPRUTOLI.js";import"../chunk-MJROOEPE.js";import{a as j}from"../chunk-MGWGD6KI.js";import"../chunk-KOAWATCI.js";import"../chunk-5KJIPH2N.js";import"../chunk-YOSLXJI5.js";import"../chunk-QEDKL23P.js";import"../chunk-LPLW7OWA.js";import"../chunk-L54FWKJE.js";import"../chunk-OKQAVYW4.js";import"../chunk-AQKSO3SW.js";import{a as k,b as l,c as m}from"../chunk-FVRVBB6O.js";import"../chunk-GHUAUFG7.js";import"../chunk-5ON3XLRD.js";import"../chunk-HBWBPBSA.js";import"../chunk-XU74PNM2.js";import"../chunk-CLJ6SEGP.js";import"../chunk-ANQLWGFN.js";import"../chunk-QRV32INS.js";import"../chunk-3QWGSRYC.js";import"../chunk-LTUW36HM.js";import"../chunk-QKCNGEX4.js";import"../chunk-WEBNIUEX.js";import"../chunk-XUCR7L4G.js";import"../chunk-G66WDIIV.js";import"../chunk-GHWEXMF6.js";import"../chunk-MAA6LEE2.js";import"../chunk-VQPANPMI.js";export{n as AccessibleIcon,o as Accordion,r as AlertDialog,s as Avatar,t as Blockquote,u as Box,x as Button,y as Card,C as Chatbar,E as Checkbox,D as CheckboxGroup,g as ChevronDownIcon,F as Chip,G as Code,I as Combobox,A as Confirmation,J as ContextMenu,K as Dialog,L as DropdownMenu,c as Flex,M as Grid,p as Heading,N as Image,i as Kbd,O as Link,qa as MessageScroller,P as Navbar,z as Notice,H as Popover,Q as Portal,R as Progress,T as Radio,S as RadioGroup,U as Reset,j as ScrollArea,V as SegmentedControl,W as Select,X as Separator,pa as Sheet,oa as Shell,na as Sidebar,Y as Slider,a as Slot,b as Slottable,d as Spinner,Z as Switch,_ as Table,$ as Tabs,q as Text,aa as TextArea,ba as TextField,m as Theme,k as ThemeContext,f as ThickCheckIcon,h as ThickChevronRightIcon,e as ThickDividerHorizontalIcon,ca as Toggle,la as Toolbar,fa as ToolbarButton,ia as ToolbarFill,ea as ToolbarGroup,ga as ToolbarOverflow,ja as ToolbarSeparator,ha as ToolbarSlot,ka as ToolbarTitle,w as Tooltip,v as TooltipProvider,ma as VirtualMenu,B as VisuallyHidden,l as useThemeContext,da as useToolbarOverflow};
2
+ import"../chunk-NG54K6FL.js";import{a as ma}from"../chunk-7QBNXNEN.js";import{e as $}from"../chunk-REORAMUH.js";import{a as aa}from"../chunk-K3GDM26A.js";import{d as ba}from"../chunk-GPZHRZBE.js";import{a as ca}from"../chunk-FMVOB367.js";import{a as da,c as ea,d as fa,e as ga,f as ha,g as ia,h as ja,i as ka,j as la}from"../chunk-JTMLFTNZ.js";import{h as oa}from"../chunk-4LV37PHM.js";import{l as na}from"../chunk-2FYUM6TA.js";import{a as Y}from"../chunk-B6OFKABP.js";import{a as Z}from"../chunk-JKQN6QCP.js";import{h as _}from"../chunk-X7JHZ3HA.js";import{c as V}from"../chunk-TSS4K2U5.js";import{h as W}from"../chunk-VQDCHBZR.js";import{a as X}from"../chunk-324VC67W.js";import{g as pa}from"../chunk-HR2VHGJ5.js";import"../chunk-4G3FJUER.js";import"../chunk-ZG2XQUOH.js";import{a as R}from"../chunk-D2C2A2ZK.js";import{c as S}from"../chunk-HBO7W7SS.js";import{a as T}from"../chunk-H2J25HXP.js";import{a as U}from"../chunk-L66IUPDW.js";import{a as O}from"../chunk-C67MM24U.js";import{i as qa}from"../chunk-MMDZBPSX.js";import{e as P}from"../chunk-NWXODCTD.js";import{a as Q}from"../chunk-AXODGYRY.js";import{n as J}from"../chunk-2S7HPQVX.js";import{g as K}from"../chunk-5BX2YZV6.js";import{o as L}from"../chunk-67UEMB4K.js";import"../chunk-2ACVWLFA.js";import{a as M}from"../chunk-Q5SANVIW.js";import{a as N}from"../chunk-ENQV6SEA.js";import{a as y}from"../chunk-EPGIYTFK.js";import{m as C}from"../chunk-LABMK6Q7.js";import{b as z,c as A}from"../chunk-7V6M3MIR.js";import{c as D}from"../chunk-FYTLUDL3.js";import"../chunk-2VSRZ4IT.js";import{a as E}from"../chunk-JD4KR6VZ.js";import"../chunk-4KIZRO52.js";import{a as F}from"../chunk-J54GYD7A.js";import{a as G}from"../chunk-WD66RYF6.js";import{l as I}from"../chunk-2E57H3NH.js";import{g as H}from"../chunk-MJKVVGGV.js";import{a as B}from"../chunk-WUCBFB25.js";import{a as n}from"../chunk-B6YGNB3V.js";import{f as o}from"../chunk-DP7MPGR7.js";import{h as r}from"../chunk-WAXRIARV.js";import"../chunk-FATCGZZE.js";import"../chunk-7VJF6EXN.js";import{a as p}from"../chunk-JP36JSNP.js";import"../chunk-TGRHRMQI.js";import{a as s}from"../chunk-SUQJ7DD4.js";import{a as t}from"../chunk-HLIOHDEX.js";import{a as u}from"../chunk-XD3C3GVF.js";import{a as x}from"../chunk-KJZSXLIX.js";import"../chunk-Y2DBXOLT.js";import{a as v,b as w}from"../chunk-6YWHNLSC.js";import{a as q}from"../chunk-4MNRLB57.js";import"../chunk-BQC2P3SN.js";import"../chunk-UJ7JERJ5.js";import"../chunk-YMUERC2J.js";import"../chunk-AS2STDGA.js";import"../chunk-2ZKEQS76.js";import{a as d}from"../chunk-BUXK5VGR.js";import{a as c}from"../chunk-KVVRFWGQ.js";import"../chunk-YCLPURTD.js";import"../chunk-CR65RYGM.js";import{a as e,b as f,c as g,d as h}from"../chunk-GKDGNPBD.js";import"../chunk-7N2Q5WOM.js";import"../chunk-OAJ5DARR.js";import{b as a,c as b}from"../chunk-5KMEUZWN.js";import"../chunk-5JYSYTHA.js";import"../chunk-ISCZ57VL.js";import"../chunk-EB4AG3OL.js";import{a as i}from"../chunk-QPRUTOLI.js";import"../chunk-MJROOEPE.js";import{a as j}from"../chunk-MGWGD6KI.js";import"../chunk-KOAWATCI.js";import"../chunk-5KJIPH2N.js";import"../chunk-YOSLXJI5.js";import"../chunk-QEDKL23P.js";import"../chunk-LPLW7OWA.js";import"../chunk-L54FWKJE.js";import"../chunk-OKQAVYW4.js";import"../chunk-AQKSO3SW.js";import{a as k,b as l,c as m}from"../chunk-FVRVBB6O.js";import"../chunk-GHUAUFG7.js";import"../chunk-5ON3XLRD.js";import"../chunk-HBWBPBSA.js";import"../chunk-XU74PNM2.js";import"../chunk-CLJ6SEGP.js";import"../chunk-ANQLWGFN.js";import"../chunk-QRV32INS.js";import"../chunk-3QWGSRYC.js";import"../chunk-LTUW36HM.js";import"../chunk-QKCNGEX4.js";import"../chunk-WEBNIUEX.js";import"../chunk-XUCR7L4G.js";import"../chunk-G66WDIIV.js";import"../chunk-GHWEXMF6.js";import"../chunk-MAA6LEE2.js";import"../chunk-VQPANPMI.js";export{n as AccessibleIcon,o as Accordion,r as AlertDialog,s as Avatar,t as Blockquote,u as Box,x as Button,y as Card,C as Chatbar,E as Checkbox,D as CheckboxGroup,g as ChevronDownIcon,F as Chip,G as Code,I as Combobox,A as Confirmation,J as ContextMenu,K as Dialog,L as DropdownMenu,c as Flex,M as Grid,p as Heading,N as Image,i as Kbd,O as Link,qa as MessageScroller,P as Navbar,z as Notice,H as Popover,Q as Portal,R as Progress,T as Radio,S as RadioGroup,U as Reset,j as ScrollArea,V as SegmentedControl,W as Select,X as Separator,pa as Sheet,oa as Shell,na as Sidebar,Y as Slider,a as Slot,b as Slottable,d as Spinner,Z as Switch,_ as Table,$ as Tabs,q as Text,aa as TextArea,ba as TextField,m as Theme,k as ThemeContext,f as ThickCheckIcon,h as ThickChevronRightIcon,e as ThickDividerHorizontalIcon,ca as Toggle,la as Toolbar,fa as ToolbarButton,ia as ToolbarFill,ea as ToolbarGroup,ga as ToolbarOverflow,ja as ToolbarSeparator,ha as ToolbarSlot,ka as ToolbarTitle,w as Tooltip,v as TooltipProvider,ma as VirtualMenu,B as VisuallyHidden,l as useThemeContext,da as useToolbarOverflow};
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use client";import{a,b}from"../chunk-W4Z6ORYO.js";import"../chunk-OKQAVYW4.js";import"../chunk-5ON3XLRD.js";import"../chunk-XU74PNM2.js";import"../chunk-VQPANPMI.js";export{b as Item,a as Root};
2
+ "use client";import{a,b}from"../chunk-TSS4K2U5.js";import"../chunk-OKQAVYW4.js";import"../chunk-5ON3XLRD.js";import"../chunk-XU74PNM2.js";import"../chunk-VQPANPMI.js";export{b as Item,a as Root};
3
3
  //# sourceMappingURL=segmented-control.js.map
@@ -15,6 +15,12 @@ declare const segmentedControlRootPropDefs: {
15
15
  default: "2";
16
16
  responsive: true;
17
17
  };
18
+ variant: {
19
+ type: "enum";
20
+ className: string;
21
+ values: readonly ["soft", "raised", "outline"];
22
+ default: "soft";
23
+ };
18
24
  orientation: {
19
25
  type: "enum";
20
26
  className: string;
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-control.props.d.ts","sourceRoot":"","sources":["../../../src/components/segmented-control.props.tsx"],"names":[],"mappings":"AAOA,QAAA,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;CAejC,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
1
+ {"version":3,"file":"segmented-control.props.d.ts","sourceRoot":"","sources":["../../../src/components/segmented-control.props.tsx"],"names":[],"mappings":"AAUA,QAAA,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBjC,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-2ZLMWYJ6.js";import"../chunk-KRJTW535.js";export{a as segmentedControlRootPropDefs};
1
+ import{a}from"../chunk-A252TSYI.js";import"../chunk-KRJTW535.js";export{a as segmentedControlRootPropDefs};
2
2
  //# sourceMappingURL=segmented-control.props.js.map
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { textFieldRootPropDefs, textFieldSlotPropDefs, type TextFieldSlotScrubProps } from './text-field.props.js';
2
+ import { textFieldRootPropDefs, textFieldGroupPropDefs, textFieldSlotPropDefs, type TextFieldSlotScrubProps } from './text-field.props.js';
3
3
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
4
4
  import type { NotInputTextualAttributes } from '../helpers/input-attributes.js';
5
5
  import type { GetPropDefTypes } from '../props/prop-def.js';
@@ -12,10 +12,18 @@ type TextFieldInputProps = ComponentPropsWithout<'input', NotInputTextualAttribu
12
12
  interface TextFieldRootProps extends TextFieldInputProps, TextFieldRootOwnProps {
13
13
  }
14
14
  declare const TextFieldRoot: React.ForwardRefExoticComponent<TextFieldRootProps & React.RefAttributes<HTMLInputElement>>;
15
+ type TextFieldGroupOwnProps = GetPropDefTypes<typeof textFieldGroupPropDefs>;
16
+ interface TextFieldGroupProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldGroupOwnProps {
17
+ }
18
+ /**
19
+ * Joins two or more fields into one, such as X, Y and Z: one edge, square inner corners and a
20
+ * hairline between the fields. The group draws the edge, so each field keeps only its fill.
21
+ */
22
+ declare const TextFieldGroup: React.ForwardRefExoticComponent<TextFieldGroupProps & React.RefAttributes<HTMLDivElement>>;
15
23
  type TextFieldSlotOwnProps = GetPropDefTypes<typeof textFieldSlotPropDefs> & TextFieldSlotScrubProps;
16
24
  interface TextFieldSlotProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldSlotOwnProps {
17
25
  }
18
26
  declare const TextFieldSlot: React.ForwardRefExoticComponent<TextFieldSlotProps & React.RefAttributes<HTMLDivElement>>;
19
- export { TextFieldRoot as Root, TextFieldSlot as Slot };
20
- export type { TextFieldRootProps as RootProps, TextFieldSlotProps as SlotProps };
27
+ export { TextFieldRoot as Root, TextFieldGroup as Group, TextFieldSlot as Slot };
28
+ export type { TextFieldRootProps as RootProps, TextFieldGroupProps as GroupProps, TextFieldSlotProps as SlotProps };
21
29
  //# sourceMappingURL=text-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../../src/components/text-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKnH,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,KAAK,qBAAqB,GAAG,eAAe,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CAC/I,CAAC;AACF,KAAK,mBAAmB,GAAG,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAC5I,UAAU,kBAAmB,SAAQ,mBAAmB,EAAE,qBAAqB;CAAG;AAUlF,QAAA,MAAM,aAAa,6FAuGjB,CAAC;AAIH,KAAK,qBAAqB,GAAG,eAAe,CAAC,OAAO,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;AACrG,UAAU,kBAAmB,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,qBAAqB;CAAG;AAYzG,QAAA,MAAM,aAAa,2FAoUjB,CAAC;AAGH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC;AACxD,YAAY,EAAE,kBAAkB,IAAI,SAAS,EAAE,kBAAkB,IAAI,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../../src/components/text-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAK3I,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,KAAK,qBAAqB,GAAG,eAAe,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CAC/I,CAAC;AACF,KAAK,mBAAmB,GAAG,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAC5I,UAAU,kBAAmB,SAAQ,mBAAmB,EAAE,qBAAqB;CAAG;AAelF,QAAA,MAAM,aAAa,6FAkHjB,CAAC;AAGH,KAAK,sBAAsB,GAAG,eAAe,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC7E,UAAU,mBAAoB,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,sBAAsB;CAAG;AAE3G;;;GAGG;AACH,QAAA,MAAM,cAAc,4FAkBlB,CAAC;AAIH,KAAK,qBAAqB,GAAG,eAAe,CAAC,OAAO,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;AACrG,UAAU,kBAAmB,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,qBAAqB;CAAG;AAYzG,QAAA,MAAM,aAAa,2FAoUjB,CAAC;AAGH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,cAAc,IAAI,KAAK,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC;AACjF,YAAY,EAAE,kBAAkB,IAAI,SAAS,EAAE,mBAAmB,IAAI,UAAU,EAAE,kBAAkB,IAAI,SAAS,EAAE,CAAC"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use client";import{a,b}from"../chunk-ZOUIIO4C.js";import"../chunk-YCLPURTD.js";import"../chunk-CR65RYGM.js";import"../chunk-OAJ5DARR.js";import"../chunk-OKQAVYW4.js";import"../chunk-5ON3XLRD.js";import"../chunk-HBWBPBSA.js";import"../chunk-XU74PNM2.js";import"../chunk-CLJ6SEGP.js";import"../chunk-VQPANPMI.js";export{a as Root,b as Slot};
2
+ "use client";import{a,b,c}from"../chunk-GPZHRZBE.js";import"../chunk-YCLPURTD.js";import"../chunk-CR65RYGM.js";import"../chunk-OAJ5DARR.js";import"../chunk-OKQAVYW4.js";import"../chunk-5ON3XLRD.js";import"../chunk-HBWBPBSA.js";import"../chunk-XU74PNM2.js";import"../chunk-CLJ6SEGP.js";import"../chunk-VQPANPMI.js";export{b as Group,a as Root,c as Slot};
3
3
  //# sourceMappingURL=text-field.js.map
@@ -43,6 +43,35 @@ declare const textFieldRootPropDefs: {
43
43
  default: undefined;
44
44
  };
45
45
  };
46
+ declare const textFieldGroupPropDefs: {
47
+ radius: {
48
+ type: "enum";
49
+ values: readonly ["none", "small", "medium", "large", "full"];
50
+ default: undefined;
51
+ };
52
+ color: {
53
+ type: "enum";
54
+ values: readonly ["gray", "gold", "bronze", "brown", "yellow", "amber", "orange", "tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "lime", "mint", "sky"];
55
+ default: ("gray" | "gold" | "bronze" | "brown" | "yellow" | "amber" | "orange" | "tomato" | "red" | "ruby" | "crimson" | "pink" | "plum" | "purple" | "violet" | "iris" | "indigo" | "blue" | "cyan" | "teal" | "jade" | "green" | "grass" | "lime" | "mint" | "sky") | undefined;
56
+ };
57
+ size: {
58
+ type: "enum";
59
+ className: string;
60
+ values: readonly ["1", "2", "3", "4"];
61
+ default: "2";
62
+ responsive: true;
63
+ };
64
+ variant: {
65
+ type: "enum";
66
+ className: string;
67
+ values: readonly ["raised", "surface", "soft", "outline", "ghost"];
68
+ default: "raised";
69
+ };
70
+ disabled: {
71
+ type: "boolean";
72
+ default: false;
73
+ };
74
+ };
46
75
  declare const textFieldSlotPropDefs: {
47
76
  gap: {
48
77
  type: "enum | string";
@@ -108,5 +137,5 @@ interface TextFieldSlotScrubProps {
108
137
  onScrub?: (delta: number, isChanging: boolean) => void;
109
138
  }
110
139
  export type { TextFieldSlotScrubProps };
111
- export { textFieldRootPropDefs, textFieldSlotPropDefs };
140
+ export { textFieldRootPropDefs, textFieldGroupPropDefs, textFieldSlotPropDefs };
112
141
  //# sourceMappingURL=text-field.props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-field.props.d.ts","sourceRoot":"","sources":["../../../src/components/text-field.props.tsx"],"names":[],"mappings":"AAUA,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAIF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa1B,CAAC;AAEF,kFAAkF;AAClF,UAAU,uBAAuB;IAC/B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"text-field.props.d.ts","sourceRoot":"","sources":["../../../src/components/text-field.props.tsx"],"names":[],"mappings":"AAUA,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAKF,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU3B,CAAC;AAIF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa1B,CAAC;AAEF,kFAAkF;AAClF,UAAU,uBAAuB;IAC/B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-BP64M73W.js";import"../chunk-P7VSZYG3.js";import"../chunk-UMYPLUG3.js";import"../chunk-FJLYSZV3.js";import"../chunk-KRJTW535.js";import"../chunk-CUNKWFKA.js";import"../chunk-NZJGC6ZW.js";export{a as textFieldRootPropDefs,b as textFieldSlotPropDefs};
1
+ import{a,b,c}from"../chunk-FIMFM25N.js";import"../chunk-P7VSZYG3.js";import"../chunk-UMYPLUG3.js";import"../chunk-FJLYSZV3.js";import"../chunk-KRJTW535.js";import"../chunk-CUNKWFKA.js";import"../chunk-NZJGC6ZW.js";export{b as textFieldGroupPropDefs,a as textFieldRootPropDefs,c as textFieldSlotPropDefs};
2
2
  //# sourceMappingURL=text-field.props.js.map
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import"./chunk-AYKOOEZR.js";import{a as uo}from"./chunk-RIHTVZVJ.js";import{a as vo,b as wo,c as yo,d as zo}from"./chunk-3LIF53YY.js";import{a as so}from"./chunk-WTP2KIK3.js";import"./chunk-NG54K6FL.js";import{a as jo}from"./chunk-7QBNXNEN.js";import{e as ro}from"./chunk-REORAMUH.js";import{a as eo}from"./chunk-K3GDM26A.js";import{c as fo}from"./chunk-ZOUIIO4C.js";import{a as mo}from"./chunk-FMVOB367.js";import{a as po,c as to,d as xo,e as ao,f as bo,g as co,h as go,i as ho,j as io}from"./chunk-JTMLFTNZ.js";import{h as lo}from"./chunk-4LV37PHM.js";import{l as ko}from"./chunk-2FYUM6TA.js";import{a as _}from"./chunk-B6OFKABP.js";import{a as $}from"./chunk-JKQN6QCP.js";import{h as oo}from"./chunk-X7JHZ3HA.js";import{c as X}from"./chunk-W4Z6ORYO.js";import{h as Y}from"./chunk-VQDCHBZR.js";import{a as Z}from"./chunk-324VC67W.js";import{g as no}from"./chunk-HR2VHGJ5.js";import"./chunk-4G3FJUER.js";import"./chunk-ZG2XQUOH.js";import{a as T}from"./chunk-D2C2A2ZK.js";import{c as U}from"./chunk-HBO7W7SS.js";import{a as V}from"./chunk-H2J25HXP.js";import{a as W}from"./chunk-L66IUPDW.js";import{a as Q}from"./chunk-C67MM24U.js";import{i as qo}from"./chunk-MMDZBPSX.js";import{e as R}from"./chunk-NWXODCTD.js";import{a as S}from"./chunk-AXODGYRY.js";import{n as L}from"./chunk-2S7HPQVX.js";import{g as M}from"./chunk-5BX2YZV6.js";import{o as N}from"./chunk-67UEMB4K.js";import"./chunk-2ACVWLFA.js";import{a as O}from"./chunk-Q5SANVIW.js";import{a as P}from"./chunk-ENQV6SEA.js";import{a as A}from"./chunk-EPGIYTFK.js";import{m as E}from"./chunk-LABMK6Q7.js";import{b as B,c as C}from"./chunk-7V6M3MIR.js";import{c as F}from"./chunk-FYTLUDL3.js";import"./chunk-2VSRZ4IT.js";import{a as G}from"./chunk-JD4KR6VZ.js";import"./chunk-4KIZRO52.js";import{a as H}from"./chunk-J54GYD7A.js";import{a as I}from"./chunk-WD66RYF6.js";import{l as K}from"./chunk-2E57H3NH.js";import{g as J}from"./chunk-MJKVVGGV.js";import{a as D}from"./chunk-WUCBFB25.js";import{a as h}from"./chunk-B6YGNB3V.js";import{f as i}from"./chunk-DP7MPGR7.js";import{h as n}from"./chunk-WAXRIARV.js";import"./chunk-FATCGZZE.js";import{a as l}from"./chunk-7VJF6EXN.js";import{a as j}from"./chunk-JP36JSNP.js";import"./chunk-TGRHRMQI.js";import{a as q}from"./chunk-SUQJ7DD4.js";import{a as s}from"./chunk-HLIOHDEX.js";import{a as u}from"./chunk-XD3C3GVF.js";import{a as z}from"./chunk-KJZSXLIX.js";import{a as y}from"./chunk-Y2DBXOLT.js";import{a as v,b as w}from"./chunk-6YWHNLSC.js";import{a as k}from"./chunk-4MNRLB57.js";import"./chunk-BQC2P3SN.js";import"./chunk-UJ7JERJ5.js";import"./chunk-YMUERC2J.js";import"./chunk-AS2STDGA.js";import"./chunk-2ZKEQS76.js";import{a as f}from"./chunk-BUXK5VGR.js";import{a as e}from"./chunk-KVVRFWGQ.js";import"./chunk-YCLPURTD.js";import"./chunk-CR65RYGM.js";import{a as m,b as p,c as t,d as x}from"./chunk-GKDGNPBD.js";import"./chunk-7N2Q5WOM.js";import"./chunk-OAJ5DARR.js";import{b as o,c as r}from"./chunk-5KMEUZWN.js";import"./chunk-5JYSYTHA.js";import"./chunk-ISCZ57VL.js";import"./chunk-EB4AG3OL.js";import{a}from"./chunk-QPRUTOLI.js";import"./chunk-MJROOEPE.js";import{a as b}from"./chunk-MGWGD6KI.js";import"./chunk-KOAWATCI.js";import"./chunk-5KJIPH2N.js";import"./chunk-YOSLXJI5.js";import"./chunk-QEDKL23P.js";import"./chunk-LPLW7OWA.js";import"./chunk-L54FWKJE.js";import"./chunk-OKQAVYW4.js";import"./chunk-AQKSO3SW.js";import{a as c,b as d,c as g}from"./chunk-FVRVBB6O.js";import"./chunk-GHUAUFG7.js";import"./chunk-5ON3XLRD.js";import"./chunk-HBWBPBSA.js";import"./chunk-XU74PNM2.js";import"./chunk-CLJ6SEGP.js";import"./chunk-ANQLWGFN.js";import"./chunk-QRV32INS.js";import"./chunk-3QWGSRYC.js";import"./chunk-LTUW36HM.js";import"./chunk-QKCNGEX4.js";import"./chunk-WEBNIUEX.js";import"./chunk-XUCR7L4G.js";import"./chunk-G66WDIIV.js";import"./chunk-GHWEXMF6.js";import"./chunk-MAA6LEE2.js";import"./chunk-VQPANPMI.js";export{vo as APPEARANCE_STORAGE_KEY,h as AccessibleIcon,i as Accordion,n as AlertDialog,q as Avatar,s as Blockquote,u as Box,z as Button,A as Card,E as Chatbar,G as Checkbox,F as CheckboxGroup,t as ChevronDownIcon,H as Chip,I as Code,K as Combobox,C as Confirmation,L as ContextMenu,M as Dialog,N as DropdownMenu,e as Flex,O as Grid,j as Heading,P as Image,a as Kbd,Q as Link,qo as MessageScroller,R as Navbar,B as Notice,J as Popover,S as Portal,T as Progress,V as Radio,U as RadioGroup,W as Reset,b as ScrollArea,X as SegmentedControl,Y as Select,Z as Separator,no as Sheet,lo as Shell,ko as Sidebar,_ as Slider,o as Slot,r as Slottable,f as Spinner,$ as Switch,oo as Table,ro as Tabs,k as Text,eo as TextArea,fo as TextField,g as Theme,c as ThemeContext,p as ThickCheckIcon,x as ThickChevronRightIcon,m as ThickDividerHorizontalIcon,mo as Toggle,io as Toolbar,xo as ToolbarButton,co as ToolbarFill,to as ToolbarGroup,ao as ToolbarOverflow,go as ToolbarSeparator,bo as ToolbarSlot,ho as ToolbarTitle,w as Tooltip,v as TooltipProvider,jo as VirtualMenu,D as VisuallyHidden,wo as appearanceScript,yo as setAppearance,zo as useAppearance,l as useBodyPointerEventsCleanup,so as useLiveAnnouncer,d as useThemeContext,uo as useToggleState,po as useToolbarOverflow,y as useTooltipWrapper};
2
+ import"./chunk-AYKOOEZR.js";import{a as uo}from"./chunk-RIHTVZVJ.js";import{a as vo,b as wo,c as yo,d as zo}from"./chunk-3LIF53YY.js";import{a as so}from"./chunk-WTP2KIK3.js";import"./chunk-NG54K6FL.js";import{a as jo}from"./chunk-7QBNXNEN.js";import{e as ro}from"./chunk-REORAMUH.js";import{a as eo}from"./chunk-K3GDM26A.js";import{d as fo}from"./chunk-GPZHRZBE.js";import{a as mo}from"./chunk-FMVOB367.js";import{a as po,c as to,d as xo,e as ao,f as bo,g as co,h as go,i as ho,j as io}from"./chunk-JTMLFTNZ.js";import{h as lo}from"./chunk-4LV37PHM.js";import{l as ko}from"./chunk-2FYUM6TA.js";import{a as _}from"./chunk-B6OFKABP.js";import{a as $}from"./chunk-JKQN6QCP.js";import{h as oo}from"./chunk-X7JHZ3HA.js";import{c as X}from"./chunk-TSS4K2U5.js";import{h as Y}from"./chunk-VQDCHBZR.js";import{a as Z}from"./chunk-324VC67W.js";import{g as no}from"./chunk-HR2VHGJ5.js";import"./chunk-4G3FJUER.js";import"./chunk-ZG2XQUOH.js";import{a as T}from"./chunk-D2C2A2ZK.js";import{c as U}from"./chunk-HBO7W7SS.js";import{a as V}from"./chunk-H2J25HXP.js";import{a as W}from"./chunk-L66IUPDW.js";import{a as Q}from"./chunk-C67MM24U.js";import{i as qo}from"./chunk-MMDZBPSX.js";import{e as R}from"./chunk-NWXODCTD.js";import{a as S}from"./chunk-AXODGYRY.js";import{n as L}from"./chunk-2S7HPQVX.js";import{g as M}from"./chunk-5BX2YZV6.js";import{o as N}from"./chunk-67UEMB4K.js";import"./chunk-2ACVWLFA.js";import{a as O}from"./chunk-Q5SANVIW.js";import{a as P}from"./chunk-ENQV6SEA.js";import{a as A}from"./chunk-EPGIYTFK.js";import{m as E}from"./chunk-LABMK6Q7.js";import{b as B,c as C}from"./chunk-7V6M3MIR.js";import{c as F}from"./chunk-FYTLUDL3.js";import"./chunk-2VSRZ4IT.js";import{a as G}from"./chunk-JD4KR6VZ.js";import"./chunk-4KIZRO52.js";import{a as H}from"./chunk-J54GYD7A.js";import{a as I}from"./chunk-WD66RYF6.js";import{l as K}from"./chunk-2E57H3NH.js";import{g as J}from"./chunk-MJKVVGGV.js";import{a as D}from"./chunk-WUCBFB25.js";import{a as h}from"./chunk-B6YGNB3V.js";import{f as i}from"./chunk-DP7MPGR7.js";import{h as n}from"./chunk-WAXRIARV.js";import"./chunk-FATCGZZE.js";import{a as l}from"./chunk-7VJF6EXN.js";import{a as j}from"./chunk-JP36JSNP.js";import"./chunk-TGRHRMQI.js";import{a as q}from"./chunk-SUQJ7DD4.js";import{a as s}from"./chunk-HLIOHDEX.js";import{a as u}from"./chunk-XD3C3GVF.js";import{a as z}from"./chunk-KJZSXLIX.js";import{a as y}from"./chunk-Y2DBXOLT.js";import{a as v,b as w}from"./chunk-6YWHNLSC.js";import{a as k}from"./chunk-4MNRLB57.js";import"./chunk-BQC2P3SN.js";import"./chunk-UJ7JERJ5.js";import"./chunk-YMUERC2J.js";import"./chunk-AS2STDGA.js";import"./chunk-2ZKEQS76.js";import{a as f}from"./chunk-BUXK5VGR.js";import{a as e}from"./chunk-KVVRFWGQ.js";import"./chunk-YCLPURTD.js";import"./chunk-CR65RYGM.js";import{a as m,b as p,c as t,d as x}from"./chunk-GKDGNPBD.js";import"./chunk-7N2Q5WOM.js";import"./chunk-OAJ5DARR.js";import{b as o,c as r}from"./chunk-5KMEUZWN.js";import"./chunk-5JYSYTHA.js";import"./chunk-ISCZ57VL.js";import"./chunk-EB4AG3OL.js";import{a}from"./chunk-QPRUTOLI.js";import"./chunk-MJROOEPE.js";import{a as b}from"./chunk-MGWGD6KI.js";import"./chunk-KOAWATCI.js";import"./chunk-5KJIPH2N.js";import"./chunk-YOSLXJI5.js";import"./chunk-QEDKL23P.js";import"./chunk-LPLW7OWA.js";import"./chunk-L54FWKJE.js";import"./chunk-OKQAVYW4.js";import"./chunk-AQKSO3SW.js";import{a as c,b as d,c as g}from"./chunk-FVRVBB6O.js";import"./chunk-GHUAUFG7.js";import"./chunk-5ON3XLRD.js";import"./chunk-HBWBPBSA.js";import"./chunk-XU74PNM2.js";import"./chunk-CLJ6SEGP.js";import"./chunk-ANQLWGFN.js";import"./chunk-QRV32INS.js";import"./chunk-3QWGSRYC.js";import"./chunk-LTUW36HM.js";import"./chunk-QKCNGEX4.js";import"./chunk-WEBNIUEX.js";import"./chunk-XUCR7L4G.js";import"./chunk-G66WDIIV.js";import"./chunk-GHWEXMF6.js";import"./chunk-MAA6LEE2.js";import"./chunk-VQPANPMI.js";export{vo as APPEARANCE_STORAGE_KEY,h as AccessibleIcon,i as Accordion,n as AlertDialog,q as Avatar,s as Blockquote,u as Box,z as Button,A as Card,E as Chatbar,G as Checkbox,F as CheckboxGroup,t as ChevronDownIcon,H as Chip,I as Code,K as Combobox,C as Confirmation,L as ContextMenu,M as Dialog,N as DropdownMenu,e as Flex,O as Grid,j as Heading,P as Image,a as Kbd,Q as Link,qo as MessageScroller,R as Navbar,B as Notice,J as Popover,S as Portal,T as Progress,V as Radio,U as RadioGroup,W as Reset,b as ScrollArea,X as SegmentedControl,Y as Select,Z as Separator,no as Sheet,lo as Shell,ko as Sidebar,_ as Slider,o as Slot,r as Slottable,f as Spinner,$ as Switch,oo as Table,ro as Tabs,k as Text,eo as TextArea,fo as TextField,g as Theme,c as ThemeContext,p as ThickCheckIcon,x as ThickChevronRightIcon,m as ThickDividerHorizontalIcon,mo as Toggle,io as Toolbar,xo as ToolbarButton,co as ToolbarFill,to as ToolbarGroup,ao as ToolbarOverflow,go as ToolbarSeparator,bo as ToolbarSlot,ho as ToolbarTitle,w as Tooltip,v as TooltipProvider,jo as VirtualMenu,D as VisuallyHidden,wo as appearanceScript,yo as setAppearance,zo as useAppearance,l as useBodyPointerEventsCleanup,so as useLiveAnnouncer,d as useThemeContext,uo as useToggleState,po as useToolbarOverflow,y as useTooltipWrapper};
3
3
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a as lo}from"../chunk-677CX2QF.js";import{a as ko}from"../chunk-JQVW4WNN.js";import{a as jo}from"../chunk-YLDV2HKZ.js";import{a as ho,b as io}from"../chunk-WRWNN2NW.js";import{a as to}from"../chunk-LUNWI377.js";import{a as xo,b as ao}from"../chunk-BP64M73W.js";import{a as bo}from"../chunk-YHQTFDGN.js";import{a as co}from"../chunk-FH6RT6XH.js";import{a as go}from"../chunk-H3IAGAEL.js";import{a as U}from"../chunk-2ZLMWYJ6.js";import{a as V,b as W,c as X}from"../chunk-HCBR74BW.js";import{a as Y}from"../chunk-NR5FQCMU.js";import{a as Z}from"../chunk-3W34KH33.js";import{a as _}from"../chunk-HIEGLLY7.js";import{a as $}from"../chunk-5XA2N2WR.js";import{a as ro,b as eo,c as fo}from"../chunk-XDVTHL3S.js";import{a as oo}from"../chunk-P7VSZYG3.js";import{a as mo,b as po}from"../chunk-TZTUPQYK.js";import{a as O}from"../chunk-RAVZ7F5L.js";import{a as P}from"../chunk-EFXHBH3A.js";import{a as Q}from"../chunk-VW46DG7H.js";import{a as R}from"../chunk-SKOYHBIE.js";import{a as S}from"../chunk-KVOWI6SN.js";import"../chunk-STPMPY3X.js";import{a as T}from"../chunk-UONSKZQT.js";import"../chunk-OA7C34MJ.js";import"../chunk-WOR3JCLX.js";import{a as J}from"../chunk-UMYPLUG3.js";import{a as K}from"../chunk-DFLWZOQO.js";import{a as I}from"../chunk-FJLYSZV3.js";import{a as N}from"../chunk-HSWMHW37.js";import{a as M}from"../chunk-WTCZAUFY.js";import"../chunk-VCV7RACK.js";import{a as L}from"../chunk-KEWNXANF.js";import{a as C}from"../chunk-CT543Q2V.js";import{a as D}from"../chunk-BIITGC3Z.js";import"../chunk-6DWDNKLS.js";import{a as E}from"../chunk-OSSNMF5U.js";import{a as F}from"../chunk-4E5XBM5Q.js";import"../chunk-UICSVJ3B.js";import{a as G}from"../chunk-UUXZ4W6H.js";import{a as H}from"../chunk-PEMFIU3B.js";import{a as w,b as y}from"../chunk-VS2ZWRGO.js";import{a as z}from"../chunk-SBRPXQWH.js";import{a as A}from"../chunk-SJXV4BWZ.js";import{a as B}from"../chunk-N6KH2EOU.js";import{a}from"../chunk-OEPVYHSS.js";import{a as b}from"../chunk-AKXBXLCP.js";import{a as c,b as d,c as g,d as h,e as i,f as j}from"../chunk-AJWCSQIE.js";import{a as k}from"../chunk-BF4WRYUX.js";import{a as l}from"../chunk-ETQNRMHU.js";import{a as u}from"../chunk-DFGY2NZB.js";import{a as s}from"../chunk-FNAE6HUI.js";import{a as q}from"../chunk-NUVUXNHF.js";import{a as n}from"../chunk-EKTVL6SS.js";import{a as v}from"../chunk-NNE3KNH4.js";import{a as t,b as x}from"../chunk-KRJTW535.js";import{a as r,b as e,c as f,d as m,e as p}from"../chunk-CUNKWFKA.js";import{a as o}from"../chunk-NZJGC6ZW.js";export{m as accentColorPropDef,r as accentColors,u as alertDialogContentPropDefs,o as asChildPropDef,v as avatarPropDefs,C as blockquotePropDefs,D as boxPropDefs,io as breakpointSet,ho as breakpoints,a as buttonPropDefs,E as cardPropDefs,F as checkboxGroupRootPropDefs,b as checkboxPropDefs,G as chipPropDefs,H as codePropDefs,f as colorPropDef,i as contextMenuCheckboxItemPropDefs,g as contextMenuContentPropDefs,h as contextMenuItemPropDefs,j as contextMenuRadioItemPropDefs,g as contextMenuSubContentPropDefs,s as dialogContentPropDefs,i as dropdownMenuCheckboxItemPropDefs,d as dropdownMenuContentPropDefs,h as dropdownMenuItemPropDefs,j as dropdownMenuRadioItemPropDefs,g as dropdownMenuSubContentPropDefs,w as emphases,y as emphasisPropDef,J as flexPropDefs,I as gapPropDefs,p as grayAccentColorPropDef,e as grayColors,K as gridPropDefs,N as headingPropDefs,q as heightPropDefs,O as kbdPropDefs,ko as layoutPropDefs,L as leadingTrimPropDef,P as linkPropDefs,jo as marginPropDefs,oo as paddingPropDefs,Q as popoverContentPropDefs,R as progressPropDefs,t as radii,S as radioGroupRootPropDefs,k as radioPropDefs,x as radiusPropDef,T as scrollAreaPropDefs,U as segmentedControlRootPropDefs,X as selectContentPropDefs,V as selectRootPropDefs,W as selectTriggerPropDefs,Y as separatorPropDefs,lo as shadowPropDefs,Z as sliderPropDefs,_ as spinnerPropDefs,c as submenuBehaviors,$ as switchPropDefs,fo as tableCellPropDefs,ro as tableRootPropDefs,eo as tableRowPropDefs,po as tabsContentPropDefs,l as tabsListPropDefs,mo as tabsRootPropDefs,M as textAlignPropDef,to as textAreaPropDefs,xo as textFieldRootPropDefs,ao as textFieldSlotPropDefs,bo as textPropDefs,z as textWrapPropDef,co as themePropDefs,go as tooltipPropDefs,A as truncatePropDef,B as weightPropDef,n as widthPropDefs};
1
+ import{a as no}from"../chunk-677CX2QF.js";import{a as lo}from"../chunk-JQVW4WNN.js";import{a as ko}from"../chunk-YLDV2HKZ.js";import{a as io,b as jo}from"../chunk-WRWNN2NW.js";import{a as to}from"../chunk-LUNWI377.js";import{a as xo,b as ao,c as bo}from"../chunk-FIMFM25N.js";import{a as co}from"../chunk-YHQTFDGN.js";import{a as go}from"../chunk-FH6RT6XH.js";import{a as ho}from"../chunk-H3IAGAEL.js";import{a as U}from"../chunk-A252TSYI.js";import{a as V,b as W,c as X}from"../chunk-HCBR74BW.js";import{a as Y}from"../chunk-NR5FQCMU.js";import{a as Z}from"../chunk-3W34KH33.js";import{a as _}from"../chunk-HIEGLLY7.js";import{a as $}from"../chunk-5XA2N2WR.js";import{a as ro,b as eo,c as fo}from"../chunk-XDVTHL3S.js";import{a as oo}from"../chunk-P7VSZYG3.js";import{a as mo,b as po}from"../chunk-TZTUPQYK.js";import{a as O}from"../chunk-RAVZ7F5L.js";import{a as P}from"../chunk-EFXHBH3A.js";import{a as Q}from"../chunk-VW46DG7H.js";import{a as R}from"../chunk-SKOYHBIE.js";import{a as S}from"../chunk-KVOWI6SN.js";import"../chunk-STPMPY3X.js";import{a as T}from"../chunk-UONSKZQT.js";import"../chunk-OA7C34MJ.js";import"../chunk-WOR3JCLX.js";import{a as J}from"../chunk-UMYPLUG3.js";import{a as K}from"../chunk-DFLWZOQO.js";import{a as I}from"../chunk-FJLYSZV3.js";import{a as N}from"../chunk-HSWMHW37.js";import{a as M}from"../chunk-WTCZAUFY.js";import"../chunk-VCV7RACK.js";import{a as L}from"../chunk-KEWNXANF.js";import{a as C}from"../chunk-CT543Q2V.js";import{a as D}from"../chunk-BIITGC3Z.js";import"../chunk-6DWDNKLS.js";import{a as E}from"../chunk-OSSNMF5U.js";import{a as F}from"../chunk-4E5XBM5Q.js";import"../chunk-UICSVJ3B.js";import{a as G}from"../chunk-UUXZ4W6H.js";import{a as H}from"../chunk-PEMFIU3B.js";import{a as w,b as y}from"../chunk-VS2ZWRGO.js";import{a as z}from"../chunk-SBRPXQWH.js";import{a as A}from"../chunk-SJXV4BWZ.js";import{a as B}from"../chunk-N6KH2EOU.js";import{a}from"../chunk-OEPVYHSS.js";import{a as b}from"../chunk-AKXBXLCP.js";import{a as c,b as d,c as g,d as h,e as i,f as j}from"../chunk-AJWCSQIE.js";import{a as k}from"../chunk-BF4WRYUX.js";import{a as l}from"../chunk-ETQNRMHU.js";import{a as u}from"../chunk-DFGY2NZB.js";import{a as s}from"../chunk-FNAE6HUI.js";import{a as q}from"../chunk-NUVUXNHF.js";import{a as n}from"../chunk-EKTVL6SS.js";import{a as v}from"../chunk-NNE3KNH4.js";import{a as t,b as x}from"../chunk-KRJTW535.js";import{a as r,b as e,c as f,d as m,e as p}from"../chunk-CUNKWFKA.js";import{a as o}from"../chunk-NZJGC6ZW.js";export{m as accentColorPropDef,r as accentColors,u as alertDialogContentPropDefs,o as asChildPropDef,v as avatarPropDefs,C as blockquotePropDefs,D as boxPropDefs,jo as breakpointSet,io as breakpoints,a as buttonPropDefs,E as cardPropDefs,F as checkboxGroupRootPropDefs,b as checkboxPropDefs,G as chipPropDefs,H as codePropDefs,f as colorPropDef,i as contextMenuCheckboxItemPropDefs,g as contextMenuContentPropDefs,h as contextMenuItemPropDefs,j as contextMenuRadioItemPropDefs,g as contextMenuSubContentPropDefs,s as dialogContentPropDefs,i as dropdownMenuCheckboxItemPropDefs,d as dropdownMenuContentPropDefs,h as dropdownMenuItemPropDefs,j as dropdownMenuRadioItemPropDefs,g as dropdownMenuSubContentPropDefs,w as emphases,y as emphasisPropDef,J as flexPropDefs,I as gapPropDefs,p as grayAccentColorPropDef,e as grayColors,K as gridPropDefs,N as headingPropDefs,q as heightPropDefs,O as kbdPropDefs,lo as layoutPropDefs,L as leadingTrimPropDef,P as linkPropDefs,ko as marginPropDefs,oo as paddingPropDefs,Q as popoverContentPropDefs,R as progressPropDefs,t as radii,S as radioGroupRootPropDefs,k as radioPropDefs,x as radiusPropDef,T as scrollAreaPropDefs,U as segmentedControlRootPropDefs,X as selectContentPropDefs,V as selectRootPropDefs,W as selectTriggerPropDefs,Y as separatorPropDefs,no as shadowPropDefs,Z as sliderPropDefs,_ as spinnerPropDefs,c as submenuBehaviors,$ as switchPropDefs,fo as tableCellPropDefs,ro as tableRootPropDefs,eo as tableRowPropDefs,po as tabsContentPropDefs,l as tabsListPropDefs,mo as tabsRootPropDefs,M as textAlignPropDef,to as textAreaPropDefs,ao as textFieldGroupPropDefs,xo as textFieldRootPropDefs,bo as textFieldSlotPropDefs,co as textPropDefs,z as textWrapPropDef,go as themePropDefs,ho as tooltipPropDefs,A as truncatePropDef,B as weightPropDef,n as widthPropDefs};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@womp/kookie-ui",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "description": "Kookie UI v1: a React component library with design tokens, flexible theming, a full layout shell, and comprehensive documentation.",
5
5
  "keywords": [
6
6
  "react",
@@ -302,6 +302,49 @@
302
302
  background-color: var(--neutral-3);
303
303
  }
304
304
 
305
+ /* * * * * * * * * * * * * * * * * * * */
306
+ /* */
307
+ /* Variants / Raised and Outline */
308
+ /* */
309
+ /* * * * * * * * * * * * * * * * * * * */
310
+
311
+ /*
312
+ * The track wears the edge a TextField of the same variant wears, so a panel of raised or outlined
313
+ * fields has no filled shape left in it. The indicator turns soft: chrome inside chrome would
314
+ * stack two edges, so it is a neutral fill inset from the track's edge.
315
+ */
316
+ .kui-SegmentedControlRoot:where(.kui-variant-raised, .kui-variant-outline) {
317
+ --segmented-control-indicator-background-color: var(--neutral-a4);
318
+
319
+ & :where(.kui-SegmentedControlIndicator)::before {
320
+ inset: var(--segmented-control-indicator-inset);
321
+ border-radius: max(var(--border-width-standard), calc(var(--segmented-control-border-radius) - var(--segmented-control-indicator-inset)));
322
+ box-shadow: none;
323
+ }
324
+ }
325
+
326
+ .kui-SegmentedControlRoot:where(.kui-variant-raised) {
327
+ --segmented-control-indicator-inset: 2px;
328
+ background-color: var(--field-fill);
329
+ box-shadow: var(--control-chrome);
330
+
331
+ &:where([data-disabled]) {
332
+ background-color: var(--field-fill-disabled);
333
+ box-shadow: inset 0 0 0 1px var(--field-edge-disabled);
334
+ }
335
+ }
336
+
337
+ .kui-SegmentedControlRoot:where(.kui-variant-outline) {
338
+ --segmented-control-indicator-inset: 2px;
339
+ background-color: transparent;
340
+ box-shadow: inset 0 0 0 1px var(--neutral-6);
341
+
342
+ &:where([data-disabled]) {
343
+ background-color: transparent;
344
+ box-shadow: inset 0 0 0 1px var(--neutral-a6);
345
+ }
346
+ }
347
+
305
348
  /* * * * * * * * * * * * * * * * * * * */
306
349
  /* */
307
350
  /* Icon-Only Mode */
@@ -4,10 +4,14 @@ import type { PropDef } from '../props/prop-def.js';
4
4
 
5
5
  const sizes = ['1', '2', '3', '4'] as const;
6
6
  const orientations = ['horizontal', 'vertical'] as const;
7
+ // soft is a filled track. raised and outline match the TextField variants of the same name, for
8
+ // panels where every other control is raised or outlined.
9
+ const variants = ['soft', 'raised', 'outline'] as const;
7
10
 
8
11
  const segmentedControlRootPropDefs = {
9
12
  disabled: { type: 'boolean', default: false },
10
13
  size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },
14
+ variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'soft' },
11
15
  orientation: {
12
16
  type: 'enum',
13
17
  className: 'kui-r-orientation',
@@ -19,6 +23,7 @@ const segmentedControlRootPropDefs = {
19
23
  } satisfies {
20
24
  disabled?: PropDef<boolean>;
21
25
  size: PropDef<(typeof sizes)[number]>;
26
+ variant: PropDef<(typeof variants)[number]>;
22
27
  orientation: PropDef<(typeof orientations)[number]>;
23
28
  };
24
29