@kushagradhawan/kookie-ui 0.1.69 → 0.1.71

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 (87) hide show
  1. package/dist/cjs/components/_internal/shell-bottom.d.ts +2 -21
  2. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  4. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  5. package/dist/cjs/components/_internal/shell-inspector.d.ts +10 -21
  6. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  7. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  8. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  9. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts +7 -0
  10. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts.map +1 -0
  11. package/dist/cjs/components/_internal/shell-prop-helpers.js +2 -0
  12. package/dist/cjs/components/_internal/shell-prop-helpers.js.map +7 -0
  13. package/dist/cjs/components/_internal/shell-sidebar.d.ts +4 -21
  14. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  15. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  16. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  17. package/dist/cjs/components/chatbar.d.ts +12 -3
  18. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  19. package/dist/cjs/components/chatbar.js +1 -1
  20. package/dist/cjs/components/chatbar.js.map +3 -3
  21. package/dist/cjs/components/schemas/shell.schema.d.ts +70 -70
  22. package/dist/cjs/components/shell.context.d.ts +1 -0
  23. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  24. package/dist/cjs/components/shell.context.js.map +2 -2
  25. package/dist/cjs/components/shell.d.ts +6 -26
  26. package/dist/cjs/components/shell.d.ts.map +1 -1
  27. package/dist/cjs/components/shell.hooks.d.ts +19 -2
  28. package/dist/cjs/components/shell.hooks.d.ts.map +1 -1
  29. package/dist/cjs/components/shell.hooks.js +1 -1
  30. package/dist/cjs/components/shell.hooks.js.map +3 -3
  31. package/dist/cjs/components/shell.js +1 -1
  32. package/dist/cjs/components/shell.js.map +3 -3
  33. package/dist/cjs/components/shell.types.d.ts +21 -0
  34. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  35. package/dist/cjs/components/shell.types.js +1 -1
  36. package/dist/cjs/components/shell.types.js.map +2 -2
  37. package/dist/esm/components/_internal/shell-bottom.d.ts +2 -21
  38. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  39. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  40. package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
  41. package/dist/esm/components/_internal/shell-inspector.d.ts +10 -21
  42. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  43. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  44. package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
  45. package/dist/esm/components/_internal/shell-prop-helpers.d.ts +7 -0
  46. package/dist/esm/components/_internal/shell-prop-helpers.d.ts.map +1 -0
  47. package/dist/esm/components/_internal/shell-prop-helpers.js +2 -0
  48. package/dist/esm/components/_internal/shell-prop-helpers.js.map +7 -0
  49. package/dist/esm/components/_internal/shell-sidebar.d.ts +4 -21
  50. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  51. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  52. package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
  53. package/dist/esm/components/chatbar.d.ts +12 -3
  54. package/dist/esm/components/chatbar.d.ts.map +1 -1
  55. package/dist/esm/components/chatbar.js +1 -1
  56. package/dist/esm/components/chatbar.js.map +3 -3
  57. package/dist/esm/components/schemas/shell.schema.d.ts +70 -70
  58. package/dist/esm/components/shell.context.d.ts +1 -0
  59. package/dist/esm/components/shell.context.d.ts.map +1 -1
  60. package/dist/esm/components/shell.context.js.map +2 -2
  61. package/dist/esm/components/shell.d.ts +6 -26
  62. package/dist/esm/components/shell.d.ts.map +1 -1
  63. package/dist/esm/components/shell.hooks.d.ts +19 -2
  64. package/dist/esm/components/shell.hooks.d.ts.map +1 -1
  65. package/dist/esm/components/shell.hooks.js +1 -1
  66. package/dist/esm/components/shell.hooks.js.map +3 -3
  67. package/dist/esm/components/shell.js +1 -1
  68. package/dist/esm/components/shell.js.map +3 -3
  69. package/dist/esm/components/shell.types.d.ts +21 -0
  70. package/dist/esm/components/shell.types.d.ts.map +1 -1
  71. package/dist/esm/components/shell.types.js.map +2 -2
  72. package/package.json +1 -1
  73. package/schemas/base-button.json +1 -1
  74. package/schemas/button.json +1 -1
  75. package/schemas/icon-button.json +1 -1
  76. package/schemas/index.json +6 -6
  77. package/schemas/toggle-button.json +1 -1
  78. package/schemas/toggle-icon-button.json +1 -1
  79. package/src/components/_internal/shell-bottom.tsx +305 -321
  80. package/src/components/_internal/shell-inspector.tsx +310 -320
  81. package/src/components/_internal/shell-prop-helpers.ts +53 -0
  82. package/src/components/_internal/shell-sidebar.tsx +370 -384
  83. package/src/components/chatbar.tsx +22 -6
  84. package/src/components/shell.context.tsx +1 -0
  85. package/src/components/shell.hooks.ts +67 -2
  86. package/src/components/shell.tsx +186 -200
  87. package/src/components/shell.types.ts +23 -0
@@ -1121,13 +1121,28 @@ const RowEnd = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'
1121
1121
  });
1122
1122
  RowEnd.displayName = 'Chatbar.RowEnd';
1123
1123
 
1124
- interface SendProps extends Omit<IconButtonProps, 'size'> {
1124
+ type SendProps = Omit<IconButtonProps, 'aria-label' | 'aria-labelledby'> & {
1125
+ /** Optional override for accessible name. Defaults to "Send". */
1126
+ 'aria-label'?: string;
1127
+ 'aria-labelledby'?: string;
1125
1128
  asChild?: boolean;
1126
1129
  clearOnSend?: boolean;
1127
- }
1130
+ };
1128
1131
 
1129
1132
  const Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef) => {
1130
- const { asChild, clearOnSend = true, disabled, children, className, style, ...buttonProps } = props;
1133
+ const {
1134
+ asChild,
1135
+ clearOnSend = true,
1136
+ disabled,
1137
+ children,
1138
+ className,
1139
+ style,
1140
+ size: sizeProp,
1141
+ variant: variantProp,
1142
+ 'aria-label': ariaLabel,
1143
+ 'aria-labelledby': ariaLabelledby,
1144
+ ...buttonProps
1145
+ } = props;
1131
1146
  const ctx = useChatbarContext();
1132
1147
 
1133
1148
  const trimmed = ctx.value.trim();
@@ -1149,8 +1164,8 @@ const Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef
1149
1164
  <IconButton
1150
1165
  {...(buttonProps as any)}
1151
1166
  ref={forwardedRef as any}
1152
- size={ctx.size}
1153
- variant={ctx.open ? 'solid' : 'ghost'}
1167
+ size={sizeProp ?? ctx.size}
1168
+ variant={variantProp ?? (ctx.open ? 'solid' : 'ghost')}
1154
1169
  disabled={disabled || ctx.disabled || ctx.readOnly}
1155
1170
  className={classNames('rt-ChatbarSend', className)}
1156
1171
  style={{
@@ -1160,7 +1175,8 @@ const Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef
1160
1175
  }}
1161
1176
  asChild={asChild}
1162
1177
  onClick={handleClick}
1163
- aria-label={buttonProps['aria-label'] ?? 'Send'}
1178
+ aria-label={ariaLabel ?? (ariaLabelledby ? undefined : 'Send')}
1179
+ aria-labelledby={ariaLabelledby}
1164
1180
  >
1165
1181
  {children ?? (
1166
1182
  <svg
@@ -45,6 +45,7 @@ export interface ShellContextValue {
45
45
 
46
46
  const ShellContext = React.createContext<ShellContextValue | null>(null);
47
47
 
48
+ /** @internal Shell root context. Prefer slice hooks (useSidebarMode, useShellActions, etc.). */
48
49
  export function useShell() {
49
50
  const ctx = React.useContext(ShellContext);
50
51
  if (!ctx) throw new Error('Shell components must be used within <Shell.Root>');
@@ -3,7 +3,7 @@ import type { Breakpoint, PresentationValue, ResponsivePresentation } from './sh
3
3
  import { _BREAKPOINTS } from './shell.types.js';
4
4
  import { useShell } from './shell.context.js';
5
5
 
6
- export function useResponsivePresentation(presentation: ResponsivePresentation): PresentationValue {
6
+ function useResponsivePresentation(presentation: ResponsivePresentation): PresentationValue {
7
7
  const { currentBreakpoint } = useShell();
8
8
 
9
9
  return React.useMemo(() => {
@@ -35,7 +35,7 @@ export function useResponsivePresentation(presentation: ResponsivePresentation):
35
35
  * If no value is defined for the current breakpoint, search smaller breakpoints down to 'initial'.
36
36
  * Returns undefined when passed a responsive map with no matching key across the chain.
37
37
  */
38
- export function useResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>> | undefined): T | undefined {
38
+ function useResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>> | undefined): T | undefined {
39
39
  const { currentBreakpoint } = useShell();
40
40
 
41
41
  return React.useMemo(() => {
@@ -64,3 +64,68 @@ export function useResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>>
64
64
  return undefined;
65
65
  }, [value, currentBreakpoint]);
66
66
  }
67
+
68
+ type ResponsiveStateValue<T> = T | Partial<Record<Breakpoint, T>>;
69
+
70
+ interface UseResponsiveInitialStateOptions<T> {
71
+ controlledValue?: ResponsiveStateValue<T>;
72
+ defaultValue?: ResponsiveStateValue<T>;
73
+ currentValue: T;
74
+ setValue: (value: T) => void;
75
+ breakpointReady: boolean;
76
+ onInit?: (value: T) => void;
77
+ onResponsiveChange?: (value: T) => void;
78
+ controlledIsResponsive?: boolean;
79
+ }
80
+
81
+ interface UseResponsiveInitialStateResult<T> {
82
+ resolvedControlled?: T;
83
+ resolvedDefault?: T;
84
+ }
85
+
86
+ function useResponsiveInitialState<T>({
87
+ controlledValue,
88
+ defaultValue,
89
+ currentValue,
90
+ setValue,
91
+ breakpointReady,
92
+ onInit,
93
+ onResponsiveChange,
94
+ controlledIsResponsive = false,
95
+ }: UseResponsiveInitialStateOptions<T>): UseResponsiveInitialStateResult<T> {
96
+ const resolvedControlled = useResponsiveValue(controlledValue);
97
+ const resolvedDefault = useResponsiveValue(defaultValue);
98
+
99
+ const lastControlledRef = React.useRef<T | undefined>(undefined);
100
+ React.useEffect(() => {
101
+ if (resolvedControlled === undefined) return;
102
+ lastControlledRef.current = resolvedControlled;
103
+ if (currentValue === resolvedControlled) {
104
+ if (controlledIsResponsive) {
105
+ onResponsiveChange?.(resolvedControlled);
106
+ }
107
+ return;
108
+ }
109
+ setValue(resolvedControlled);
110
+ if (controlledIsResponsive) {
111
+ onResponsiveChange?.(resolvedControlled);
112
+ }
113
+ }, [resolvedControlled, currentValue, setValue, onResponsiveChange, controlledIsResponsive]);
114
+
115
+ const didInitRef = React.useRef(false);
116
+ React.useEffect(() => {
117
+ if (didInitRef.current) return;
118
+ if (!breakpointReady) return;
119
+ if (typeof controlledValue !== 'undefined') return;
120
+ if (resolvedDefault === undefined) return;
121
+ didInitRef.current = true;
122
+ if (currentValue !== resolvedDefault) {
123
+ setValue(resolvedDefault);
124
+ }
125
+ onInit?.(resolvedDefault);
126
+ }, [breakpointReady, controlledValue, resolvedDefault, currentValue, setValue, onInit]);
127
+
128
+ return { resolvedControlled, resolvedDefault };
129
+ }
130
+
131
+ export { useResponsivePresentation, useResponsiveValue, useResponsiveInitialState };