A design system in a box. hip-ui.tngl.io/docs/introduction
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

react lint

+537 -100
+18 -5
packages/eslint-config/base.js
··· 1 - import js from "@eslint/js"; 1 + import eslintJs from "@eslint/js"; 2 + import { defineConfig } from "eslint/config"; 2 3 import eslintConfigPrettier from "eslint-config-prettier"; 3 4 import turboPlugin from "eslint-plugin-turbo"; 4 5 import tseslint from "typescript-eslint"; ··· 9 10 * 10 11 * @type {import("eslint").Linter.Config[]} 11 12 * */ 12 - export const config = [ 13 - js.configs.recommended, 13 + export const config = defineConfig([ 14 14 eslintConfigPrettier, 15 - ...tseslint.configs.recommended, 15 + eslintJs.configs.recommended, 16 + { 17 + files: ["**/*.ts", "**/*.tsx"], 18 + 19 + languageOptions: { 20 + parser: tseslint.parser, 21 + parserOptions: { 22 + projectService: true, 23 + tsconfigRootDir: import.meta.dirname, 24 + }, 25 + }, 26 + 27 + extends: [tseslint.configs.recommended], 28 + }, 16 29 { 17 30 plugins: { 18 31 turbo: turboPlugin, ··· 29 42 { 30 43 ignores: ["dist/**"], 31 44 }, 32 - ]; 45 + ]);
+1
packages/eslint-config/package.json
··· 22 22 "typescript-eslint": "^8.40.0" 23 23 }, 24 24 "dependencies": { 25 + "@eslint-react/eslint-plugin": "^2.2.2", 25 26 "@stylexjs/eslint-plugin": "^0.16.2" 26 27 } 27 28 }
+11 -23
packages/eslint-config/react-internal.js
··· 1 - import js from "@eslint/js"; 2 - import eslintConfigPrettier from "eslint-config-prettier"; 3 - import tseslint from "typescript-eslint"; 1 + import * as stylex from "@stylexjs/eslint-plugin"; 4 2 import pluginReactHooks from "eslint-plugin-react-hooks"; 5 - import pluginReact from "eslint-plugin-react"; 6 - import globals from "globals"; 3 + import eslintReact from "@eslint-react/eslint-plugin"; 4 + import { defineConfig } from "eslint/config"; 5 + 7 6 import { config as baseConfig } from "./base.js"; 8 - import * as stylex from "@stylexjs/eslint-plugin"; 9 7 10 8 /** 11 9 * A custom ESLint configuration for libraries that use React. 12 10 * 13 11 * @type {import("eslint").Linter.Config[]} */ 14 - export const config = [ 12 + export const config = defineConfig([ 15 13 ...baseConfig, 16 - js.configs.recommended, 17 - eslintConfigPrettier, 18 - ...tseslint.configs.recommended, 19 - pluginReact.configs.flat.recommended, 20 14 { 21 - languageOptions: { 22 - ...pluginReact.configs.flat.recommended.languageOptions, 23 - globals: { 24 - ...globals.serviceworker, 25 - ...globals.browser, 26 - }, 27 - }, 28 - }, 29 - { 15 + files: ["**/*.ts", "**/*.tsx"], 16 + 30 17 plugins: { 31 18 "react-hooks": pluginReactHooks, 32 19 "@stylexjs": stylex, 33 20 }, 21 + 22 + extends: [eslintReact.configs["strict-type-checked"]], 23 + 34 24 settings: { react: { version: "detect" } }, 35 25 rules: { 36 26 ...pluginReactHooks.configs.recommended.rules, 37 - // React scope no longer necessary with new JSX transform. 38 - "react/react-in-jsx-scope": "off", 39 27 40 28 "@stylexjs/valid-styles": "error", 41 29 "@stylexjs/valid-styles": "error", ··· 47 35 "@stylexjs/no-lookahead-selectors": "error", 48 36 }, 49 37 }, 50 - ]; 38 + ]);
+2 -2
packages/hip-ui/src/components/button-group/index.tsx
··· 29 29 ...props 30 30 }: ButtonGroupProps) => { 31 31 return ( 32 - <ButtonGroupContext.Provider value={orientation}> 32 + <ButtonGroupContext value={orientation}> 33 33 <Group 34 34 {...stylex.props( 35 35 styles.group, ··· 41 41 > 42 42 {children} 43 43 </Group> 44 - </ButtonGroupContext.Provider> 44 + </ButtonGroupContext> 45 45 ); 46 46 };
+2 -2
packages/hip-ui/src/components/checkbox/index.tsx
··· 74 74 }: CheckboxGroupProps) { 75 75 return ( 76 76 <AriaCheckboxGroup {...props} {...stylex.props(styles.group, style)}> 77 - {label && <Label size={size}>{label}</Label>} 77 + {label !== undefined && <Label size={size}>{label}</Label>} 78 78 <Flex direction="column" gap="2"> 79 79 {children} 80 80 </Flex> ··· 111 111 <Check size={16} /> 112 112 ) : null} 113 113 </div> 114 - {children && ( 114 + {children !== undefined && ( 115 115 <Flex direction="column" gap="1"> 116 116 {children} 117 117 </Flex>
+10 -4
packages/hip-ui/src/components/color-field/index.tsx
··· 40 40 41 41 return ( 42 42 <AriaColorField {...props} {...stylex.props(inputStyles.field, style)}> 43 - {label && <Label size={size}>{label}</Label>} 43 + {label !== undefined && <Label size={size}>{label}</Label>} 44 44 <div 45 45 {...stylex.props(inputStyles.wrapper)} 46 46 onClick={() => inputRef.current?.focus()} 47 47 > 48 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 48 + {prefix !== undefined && ( 49 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 50 + )} 49 51 <Input 50 52 placeholder={placeholder} 51 53 ref={inputRef} 52 54 {...stylex.props(inputStyles.input)} 53 55 /> 54 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 56 + {suffix !== undefined && ( 57 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 58 + )} 55 59 </div> 56 - {description && <Description size={size}>{description}</Description>} 60 + {description !== undefined && ( 61 + <Description size={size}>{description}</Description> 62 + )} 57 63 <FieldError>{errorMessage}</FieldError> 58 64 </AriaColorField> 59 65 );
+8 -4
packages/hip-ui/src/components/combobox/index.tsx
··· 98 98 const popoverStyles = usePopoverStyles(); 99 99 100 100 return ( 101 - <SizeContext.Provider value={size}> 101 + <SizeContext value={size}> 102 102 <AriaComboBox {...props} {...stylex.props(inputStyles.field, style)}> 103 103 {label && <Label size={size}>{label}</Label>} 104 104 <Button {...stylex.props(inputStyles.wrapper)}> 105 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 105 + {prefix !== undefined && ( 106 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 107 + )} 106 108 <Input 107 109 {...stylex.props(inputStyles.input)} 108 110 placeholder={placeholder} 109 111 /> 110 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 112 + {suffix !== undefined && ( 113 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 114 + )} 111 115 <div {...stylex.props(inputStyles.addon)}> 112 116 <IconButton size="sm" variant="secondary" label="Open combobox"> 113 117 <ChevronDown size={16} aria-hidden="true" /> ··· 132 136 </ListBox> 133 137 </Popover> 134 138 </AriaComboBox> 135 - </SizeContext.Provider> 139 + </SizeContext> 136 140 ); 137 141 } 138 142
+2 -2
packages/hip-ui/src/components/command-menu/index.tsx
··· 146 146 }, [setIsOpen, disableGlobalShortcut]); 147 147 148 148 return ( 149 - <SizeContext.Provider value="lg"> 149 + <SizeContext value="lg"> 150 150 <ModalOverlay 151 151 isDismissable 152 152 isOpen={isOpen} ··· 174 174 </Dialog> 175 175 </Modal> 176 176 </ModalOverlay> 177 - </SizeContext.Provider> 177 + </SizeContext> 178 178 ); 179 179 } 180 180
+19 -14
packages/hip-ui/src/components/context-menu/index.tsx
··· 27 27 import { AriaButtonProps, useMenuTrigger } from "react-aria"; 28 28 import { usePopoverStyles } from "../theme/usePopoverStyles"; 29 29 30 - const ContextMenuTriggerProps = createContext< 30 + const ContextMenuTriggerPropsContext = createContext< 31 31 AriaButtonProps<"button"> & { ref?: React.Ref<HTMLDivElement> } 32 32 >({}); 33 33 ··· 44 44 setPosition: () => {}, 45 45 }); 46 46 47 - function ContextMenuRoot( 48 - props: OverlayTriggerProps & { children: React.ReactNode } 49 - ) { 47 + function ContextMenuRoot({ 48 + children, 49 + ...props 50 + }: OverlayTriggerProps & { children: React.ReactNode }) { 50 51 const scrollRef = useRef(null); 51 52 const state = useMenuTriggerState(props); 52 53 const ref = useRef<HTMLDivElement>(null); ··· 63 64 [MenuContext, { ...menuProps, ref: scrollRef }], 64 65 [OverlayTriggerStateContext, state], 65 66 [RootMenuTriggerStateContext, state], 66 - [ContextMenuTriggerProps, { ...menuTriggerProps, ref }], 67 + [ContextMenuTriggerPropsContext, { ...menuTriggerProps, ref }], 67 68 [ContextMenuStateContext, { position, setPosition }], 68 69 [ 69 70 PopoverContext, ··· 77 78 ], 78 79 ]} 79 80 > 80 - {props.children} 81 + {children} 81 82 </Provider> 82 83 ); 83 84 } 84 85 85 - function ContextMenuTrigger( 86 - props: OverlayTriggerProps & { children: React.ReactNode } 87 - ) { 86 + function ContextMenuTrigger({ 87 + children, 88 + ...props 89 + }: OverlayTriggerProps & { children: React.ReactNode }) { 88 90 const overlayTriggerState = use(OverlayTriggerStateContext); 89 - const menuTriggerProps = use(ContextMenuTriggerProps); 91 + const menuTriggerProps = use(ContextMenuTriggerPropsContext); 90 92 const { position, setPosition } = use(ContextMenuStateContext); 91 93 const onContextMenu = useCallback( 92 94 (e: React.MouseEvent<HTMLButtonElement>) => { ··· 98 100 [overlayTriggerState, setPosition] 99 101 ); 100 102 101 - if (Children.count(props.children) !== 1) { 103 + // eslint-disable-next-line @eslint-react/no-children-count 104 + if (Children.count(children) !== 1) { 102 105 throw new Error("ContextMenuTrigger must have exactly one child"); 103 106 } 104 107 105 108 return ( 106 109 <> 110 + {/* eslint-disable-next-line @eslint-react/no-clone-element */} 107 111 {cloneElement( 108 - props.children as React.ReactElement<React.HTMLAttributes<HTMLElement>>, 112 + children as React.ReactElement<React.HTMLAttributes<HTMLElement>>, 109 113 { 114 + ...props, 110 115 "aria-controls": menuTriggerProps["aria-controls"], 111 116 "aria-expanded": menuTriggerProps["aria-expanded"], 112 117 "aria-haspopup": menuTriggerProps["aria-haspopup"], ··· 154 159 const size = sizeProp || use(SizeContext); 155 160 156 161 return ( 157 - <SizeContext.Provider value={size}> 162 + <SizeContext value={size}> 158 163 <ContextMenuRoot 159 164 defaultOpen={defaultOpen} 160 165 isOpen={isOpen} ··· 171 176 <AriaMenu {...props} {...stylex.props(popoverStyles)} /> 172 177 </Popover> 173 178 </ContextMenuRoot> 174 - </SizeContext.Provider> 179 + </SizeContext> 175 180 ); 176 181 }
+7 -3
packages/hip-ui/src/components/date-field/index.tsx
··· 39 39 40 40 return ( 41 41 <AriaDateField {...props} {...stylex.props(inputStyles.field, style)}> 42 - {label && <Label size={size}>{label}</Label>} 42 + {label !== undefined && <Label size={size}>{label}</Label>} 43 43 <div 44 44 {...stylex.props(inputStyles.wrapper)} 45 45 onClick={() => inputRef.current?.focus()} 46 46 > 47 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 47 + {prefix !== undefined && ( 48 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 49 + )} 48 50 <DateInput {...stylex.props(inputStyles.input)} ref={inputRef}> 49 51 {(segment) => <DateSegment segment={segment} />} 50 52 </DateInput> 51 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 53 + {suffix !== undefined && ( 54 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 55 + )} 52 56 </div> 53 57 {description && <Description size={size}>{description}</Description>} 54 58 <FieldError>{errorMessage}</FieldError>
+2 -2
packages/hip-ui/src/components/link/index.tsx
··· 4 4 5 5 import { blue } from "../theme/colors.stylex"; 6 6 import { fontFamily, fontWeight } from "../theme/typography.stylex"; 7 - import { createContext, useContext } from "react"; 7 + import { createContext, use } from "react"; 8 8 9 9 const styles = stylex.create({ 10 10 link: { ··· 31 31 } 32 32 33 33 export function Link({ style, ...props }: LinkProps) { 34 - const context = useContext(LinkContext); 34 + const context = use(LinkContext); 35 35 36 36 return ( 37 37 <AriaLink {...props} {...stylex.props(styles.link, context.style, style)} />
+4 -4
packages/hip-ui/src/components/listbox/index.tsx
··· 63 63 const size = sizeProp || use(SizeContext); 64 64 65 65 return ( 66 - <SizeContext.Provider value={size}> 66 + <SizeContext value={size}> 67 67 <AriaListBox {...stylex.props(styles.listBox, style)} {...props} /> 68 - </SizeContext.Provider> 68 + </SizeContext> 69 69 ); 70 70 } 71 71 ··· 97 97 > 98 98 {({ isSelected }) => ( 99 99 <div {...stylex.props(listBoxItemStyles.inner)}> 100 - {prefix && ( 100 + {prefix !== undefined && ( 101 101 <div {...stylex.props(listBoxItemStyles.addon)}>{prefix}</div> 102 102 )} 103 103 <div {...stylex.props(listBoxItemStyles.label)}>{children}</div> 104 - {suffix && ( 104 + {suffix !== undefined && ( 105 105 <div {...stylex.props(listBoxItemStyles.addon)}>{suffix}</div> 106 106 )} 107 107 {isSelected && (
+4 -4
packages/hip-ui/src/components/menu/index.tsx
··· 58 58 const size = sizeProp || use(SizeContext); 59 59 60 60 return ( 61 - <SizeContext.Provider value={size}> 61 + <SizeContext value={size}> 62 62 <MenuTrigger 63 63 defaultOpen={defaultOpen} 64 64 isOpen={isOpen} ··· 75 75 <AriaMenu {...props} {...stylex.props(popoverStyles)} /> 76 76 </Popover> 77 77 </MenuTrigger> 78 - </SizeContext.Provider> 78 + </SizeContext> 79 79 ); 80 80 } 81 81 ··· 163 163 > 164 164 {({ isSelected, hasSubmenu }) => ( 165 165 <div {...stylex.props(menuItemStyles.inner)}> 166 - {prefix && ( 166 + {prefix !== undefined && ( 167 167 <div {...stylex.props(menuItemStyles.addon)}>{prefix}</div> 168 168 )} 169 169 <div {...stylex.props(menuItemStyles.label)}>{children}</div> 170 - {suffix && ( 170 + {suffix !== undefined && ( 171 171 <div {...stylex.props(menuItemStyles.addon)}>{suffix}</div> 172 172 )} 173 173 {isSelected && (
+6 -2
packages/hip-ui/src/components/number-field/index.tsx
··· 88 88 {...stylex.props(inputStyles.wrapper)} 89 89 onClick={() => inputRef.current?.focus()} 90 90 > 91 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 91 + {prefix !== undefined && ( 92 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 93 + )} 92 94 <Input 93 95 placeholder={placeholder} 94 96 ref={inputRef} 95 97 {...stylex.props(inputStyles.input)} 96 98 /> 97 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 99 + {suffix !== undefined && ( 100 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 101 + )} 98 102 <Group {...stylex.props(styles.buttons)}> 99 103 <Button slot="decrement" {...buttonStyles}> 100 104 <Minus />
+1 -1
packages/hip-ui/src/components/radio/index.tsx
··· 104 104 }: RadioGroupProps) { 105 105 return ( 106 106 <AriaRadioGroup {...props} {...stylex.props(styles.group, style)}> 107 - {label && <Label size={size}>{label}</Label>} 107 + {label !== undefined && <Label size={size}>{label}</Label>} 108 108 <Flex direction="column" gap="2"> 109 109 {children} 110 110 </Flex>
+6 -4
packages/hip-ui/src/components/search-field/index.tsx
··· 42 42 suffix?: React.ReactNode; 43 43 } 44 44 45 + const defaultPrefix = <SearchIcon />; 46 + 45 47 export function SearchField({ 46 48 label, 47 49 description, 48 50 errorMessage, 49 51 style, 50 52 size, 51 - prefix = <SearchIcon />, 53 + prefix = defaultPrefix, 52 54 suffix, 53 55 placeholder, 54 56 ...props ··· 61 63 {({ isEmpty }) => { 62 64 return ( 63 65 <> 64 - {label && <Label size={size}>{label}</Label>} 66 + {label !== undefined && <Label size={size}>{label}</Label>} 65 67 <div 66 68 {...stylex.props(inputStyles.wrapper, styles.wrapper)} 67 69 onClick={() => inputRef.current?.focus()} 68 70 > 69 - {prefix && ( 71 + {prefix !== undefined && ( 70 72 <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 71 73 )} 72 74 <Input ··· 77 79 !isEmpty && styles.clearButtonPadding 78 80 )} 79 81 /> 80 - {suffix && ( 82 + {suffix !== undefined && ( 81 83 <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 82 84 )} 83 85 {!isEmpty && (
+8 -4
packages/hip-ui/src/components/select/index.tsx
··· 82 82 const popoverStyles = usePopoverStyles(); 83 83 84 84 return ( 85 - <SizeContext.Provider value={size}> 85 + <SizeContext value={size}> 86 86 <AriaSelect 87 87 {...props} 88 88 {...stylex.props(inputStyles.field, style)} ··· 90 90 > 91 91 {label && <Label size={size}>{label}</Label>} 92 92 <Button {...stylex.props(inputStyles.wrapper)}> 93 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 93 + {prefix !== undefined && ( 94 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 95 + )} 94 96 <SelectValue {...stylex.props(inputStyles.input)}> 95 97 {({ selectedText, isPlaceholder, defaultChildren }) => { 96 98 if (isPlaceholder) return placeholder; ··· 99 101 return defaultChildren; 100 102 }} 101 103 </SelectValue> 102 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 104 + {suffix !== undefined && ( 105 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 106 + )} 103 107 <div {...stylex.props(inputStyles.addon)}> 104 108 <ChevronDown size={16} aria-hidden="true" /> 105 109 </div> ··· 121 125 </ListBox> 122 126 </Popover> 123 127 </AriaSelect> 124 - </SizeContext.Provider> 128 + </SizeContext> 125 129 ); 126 130 } 127 131
+7 -3
packages/hip-ui/src/components/text-area/index.tsx
··· 140 140 141 141 return ( 142 142 <AriaTextField {...props} {...stylex.props(styles.wrapper, style)}> 143 - {label && <Label size={size}>{label}</Label>} 143 + {label !== undefined && <Label size={size}>{label}</Label>} 144 144 <div 145 145 {...stylex.props(styles.inputWrapper, gray.bgUi, gray.text)} 146 146 onClick={() => textAreaRef.current?.focus()} 147 147 > 148 - {prefix && <div {...stylex.props(styles.addon)}>{prefix}</div>} 148 + {prefix !== undefined && ( 149 + <div {...stylex.props(styles.addon)}>{prefix}</div> 150 + )} 149 151 <AriaTextArea 150 152 {...stylex.props(styles.input, styles[`${size}Input`])} 151 153 ref={textAreaRef} 152 154 placeholder={placeholder} 153 155 rows={rows} 154 156 /> 155 - {suffix && <div {...stylex.props(styles.addon)}>{suffix}</div>} 157 + {suffix !== undefined && ( 158 + <div {...stylex.props(styles.addon)}>{suffix}</div> 159 + )} 156 160 </div> 157 161 {description && <Description size={size}>{description}</Description>} 158 162 <FieldError>{errorMessage}</FieldError>
+7 -3
packages/hip-ui/src/components/text-field/index.tsx
··· 83 83 type={type} 84 84 {...stylex.props(inputStyles.field, style)} 85 85 > 86 - {label && <Label size={size}>{label}</Label>} 86 + {label !== undefined && <Label size={size}>{label}</Label>} 87 87 <div 88 88 {...stylex.props(inputStyles.wrapper)} 89 89 onClick={() => inputRef.current?.focus()} 90 90 > 91 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 91 + {prefix !== undefined && ( 92 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 93 + )} 92 94 <Input 93 95 {...stylex.props(inputStyles.input)} 94 96 ref={inputRef} 95 97 placeholder={placeholder} 96 98 /> 97 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 99 + {suffix !== undefined && ( 100 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 101 + )} 98 102 {isPasswordInput && ( 99 103 <PasswordToggle 100 104 type={type}
+1 -1
packages/hip-ui/src/components/theme/useInputStyles.ts
··· 107 107 field: [styles.field], 108 108 wrapper: [styles.inputWrapper, gray.bgUi, gray.text, styles[size]], 109 109 input: [styles.input, styles[`${size}Input`]], 110 - addon: [styles.addon], 110 + addon: styles.addon as unknown as stylex.StyleXStyles, 111 111 }; 112 112 }
+2 -2
packages/hip-ui/src/components/theme/useListBoxItemStyles.ts
··· 9 9 typeramp, 10 10 } from "../theme/typography.stylex"; 11 11 import { SizeContext } from "../context"; 12 - import { useContext } from "react"; 12 + import { use } from "react"; 13 13 14 14 const styles = stylex.create({ 15 15 item: { ··· 94 94 }); 95 95 96 96 export function useListBoxItemStyles() { 97 - const size = useContext(SizeContext); 97 + const size = use(SizeContext); 98 98 99 99 return { 100 100 wrapper: [typeramp.label, styles.item, styles[size]],
+1
packages/hip-ui/src/components/theme/usePopoverStyles.ts
··· 18 18 }, 19 19 }); 20 20 21 + // eslint-disable-next-line @eslint-react/no-unnecessary-use-prefix 21 22 export function usePopoverStyles() { 22 23 return [styles.popover, gray.bgSubtle, gray.text, gray.border]; 23 24 }
+7 -3
packages/hip-ui/src/components/time-field/index.tsx
··· 39 39 40 40 return ( 41 41 <AriaTimeField {...props} {...stylex.props(inputStyles.field, style)}> 42 - {label && <Label size={size}>{label}</Label>} 42 + {label !== undefined && <Label size={size}>{label}</Label>} 43 43 <div 44 44 {...stylex.props(inputStyles.wrapper)} 45 45 onClick={() => inputRef.current?.focus()} 46 46 > 47 - {prefix && <div {...stylex.props(inputStyles.addon)}>{prefix}</div>} 47 + {prefix !== undefined && ( 48 + <div {...stylex.props(inputStyles.addon)}>{prefix}</div> 49 + )} 48 50 <DateInput {...stylex.props(inputStyles.input)} ref={inputRef}> 49 51 {(segment) => <DateSegment segment={segment} />} 50 52 </DateInput> 51 - {suffix && <div {...stylex.props(inputStyles.addon)}>{suffix}</div>} 53 + {suffix !== undefined && ( 54 + <div {...stylex.props(inputStyles.addon)}>{suffix}</div> 55 + )} 52 56 </div> 53 57 {description && <Description size={size}>{description}</Description>} 54 58 <FieldError>{errorMessage}</FieldError>
+2
packages/hip-ui/src/components/toggle-button copy/index.tsx
··· 121 121 toggleButtonStyles(isSelected).className || "" 122 122 } 123 123 > 124 + {/* eslint-disable-next-line @eslint-react/no-children-map */} 124 125 {Children.map(children, (child, index) => 125 126 typeof child === "string" ? ( 127 + // eslint-disable-next-line @eslint-react/no-array-index-key 126 128 <span key={`${child}-${index}`}>{child}</span> 127 129 ) : ( 128 130 child
+2 -2
packages/hip-ui/src/components/toggle-button-group/index.tsx
··· 59 59 const orientation = groupOrientation || orientationProp; 60 60 61 61 return ( 62 - <ButtonGroupContext.Provider value={orientation}> 62 + <ButtonGroupContext value={orientation}> 63 63 <AriaToggleButtonGroup 64 64 {...stylex.props( 65 65 isInGroup ··· 79 79 > 80 80 {children} 81 81 </AriaToggleButtonGroup> 82 - </ButtonGroupContext.Provider> 82 + </ButtonGroupContext> 83 83 ); 84 84 };
+2
packages/hip-ui/src/components/toggle-button/index.tsx
··· 122 122 toggleButtonStyles(isSelected).className || "" 123 123 } 124 124 > 125 + {/* eslint-disable-next-line @eslint-react/no-children-map */} 125 126 {Children.map(children, (child, index) => 126 127 typeof child === "string" ? ( 128 + // eslint-disable-next-line @eslint-react/no-array-index-key 127 129 <span key={`${child}-${index}`}>{child}</span> 128 130 ) : ( 129 131 child
+4 -4
packages/hip-ui/src/components/tree/index.tsx
··· 125 125 </Button> 126 126 127 127 <div {...stylex.props(styles.content)}> 128 - {prefix && ( 128 + {prefix !== undefined && ( 129 129 <div {...stylex.props(listBoxItemStyles.addon, styles.addon)}> 130 130 {prefix} 131 131 </div> 132 132 )} 133 133 <div {...stylex.props(listBoxItemStyles.label)}>{children}</div> 134 - {suffix && ( 134 + {suffix !== undefined && ( 135 135 <div {...stylex.props(listBoxItemStyles.addon, styles.addon)}> 136 136 {suffix} 137 137 </div> ··· 195 195 const size = sizeProp || use(SizeContext); 196 196 197 197 return ( 198 - <SizeContext.Provider value={size}> 198 + <SizeContext value={size}> 199 199 <AriaTree {...props} {...stylex.props(style)} /> 200 - </SizeContext.Provider> 200 + </SizeContext> 201 201 ); 202 202 }
+2 -2
packages/hip-ui/src/components/typography/index.tsx
··· 143 143 ); 144 144 145 145 return ( 146 - <LinkContext.Provider value={contextValue}> 146 + <LinkContext value={contextValue}> 147 147 <p 148 148 {...stylex.props( 149 149 typeramp.sublabel, ··· 152 152 )} 153 153 {...props} 154 154 /> 155 - </LinkContext.Provider> 155 + </LinkContext> 156 156 ); 157 157 }; 158 158
+389
pnpm-lock.yaml
··· 90 90 91 91 packages/eslint-config: 92 92 dependencies: 93 + '@eslint-react/eslint-plugin': 94 + specifier: ^2.2.2 95 + version: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 93 96 '@stylexjs/eslint-plugin': 94 97 specifier: ^0.16.2 95 98 version: 0.16.2 ··· 477 480 '@eslint-community/regexpp@4.12.1': 478 481 resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 479 482 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 483 + 484 + '@eslint-react/ast@2.2.2': 485 + resolution: {integrity: sha512-Zxhfj72xEa6Lc1sxQpLETkOXDmMulR28hbWTJ2a54c0PxTKDAZ+BdOoS0KpRk8zHDc7T9q/Nq/3nvOd5Yah+nQ==} 486 + engines: {node: '>=20.19.0'} 487 + 488 + '@eslint-react/core@2.2.2': 489 + resolution: {integrity: sha512-mHsSWI3/J9rROA786BJdkTodFe/WsvlN/A9laCXN/4XB+4tyaeBMfjhkCt9IffOJlfIYft2rktH8zdbAzozyGg==} 490 + engines: {node: '>=20.19.0'} 491 + 492 + '@eslint-react/eff@2.2.2': 493 + resolution: {integrity: sha512-Of0ZFSioeNs3kVuEdRKCCYJxymJ79HUiXOZq/T43zqQmfiJU6rl1JddC0sKfxEZ+nC1fX0DJDYHQbwuzoPr3DQ==} 494 + engines: {node: '>=20.19.0'} 495 + 496 + '@eslint-react/eslint-plugin@2.2.2': 497 + resolution: {integrity: sha512-VV8rk2huBTMt/yXldlpTmLbyoAgRX+yGbDLgBycJkj3VzzFCNUVgprfy/CbiGzxWwvUNTfOMYADhnhHC/W2cXg==} 498 + engines: {node: '>=20.19.0'} 499 + peerDependencies: 500 + eslint: ^9.37.0 501 + typescript: ^5.9.3 502 + 503 + '@eslint-react/shared@2.2.2': 504 + resolution: {integrity: sha512-MmSO3vUHh3SoO+Pf2qsq4s8NyBBrdE7Cm9ddFmCq8AlFhq37w2OiArkGa1qLTlizPmhpYOoDWlJi1prZVulXiA==} 505 + engines: {node: '>=20.19.0'} 506 + 507 + '@eslint-react/var@2.2.2': 508 + resolution: {integrity: sha512-psNsMfCypVaTnBDJyUFtpYb2+02mQ4lHiXN0kdnanAAXKJcDORH/1tw6k4xmv2qJ076kZtblIbhulN75RlJhmg==} 509 + engines: {node: '>=20.19.0'} 480 510 481 511 '@eslint/config-array@0.21.0': 482 512 resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} ··· 1480 1510 peerDependencies: 1481 1511 typescript: '>=4.8.4 <6.0.0' 1482 1512 1513 + '@typescript-eslint/project-service@8.46.1': 1514 + resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} 1515 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1516 + peerDependencies: 1517 + typescript: '>=4.8.4 <6.0.0' 1518 + 1483 1519 '@typescript-eslint/scope-manager@8.40.0': 1484 1520 resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} 1521 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1522 + 1523 + '@typescript-eslint/scope-manager@8.46.1': 1524 + resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} 1485 1525 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1486 1526 1487 1527 '@typescript-eslint/tsconfig-utils@8.40.0': ··· 1490 1530 peerDependencies: 1491 1531 typescript: '>=4.8.4 <6.0.0' 1492 1532 1533 + '@typescript-eslint/tsconfig-utils@8.46.1': 1534 + resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} 1535 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1536 + peerDependencies: 1537 + typescript: '>=4.8.4 <6.0.0' 1538 + 1493 1539 '@typescript-eslint/type-utils@8.40.0': 1494 1540 resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} 1495 1541 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 1497 1543 eslint: ^8.57.0 || ^9.0.0 1498 1544 typescript: '>=4.8.4 <6.0.0' 1499 1545 1546 + '@typescript-eslint/type-utils@8.46.1': 1547 + resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} 1548 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1549 + peerDependencies: 1550 + eslint: ^8.57.0 || ^9.0.0 1551 + typescript: '>=4.8.4 <6.0.0' 1552 + 1500 1553 '@typescript-eslint/types@8.40.0': 1501 1554 resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} 1502 1555 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1503 1556 1557 + '@typescript-eslint/types@8.46.1': 1558 + resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} 1559 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1560 + 1504 1561 '@typescript-eslint/typescript-estree@8.40.0': 1505 1562 resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} 1506 1563 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1507 1564 peerDependencies: 1508 1565 typescript: '>=4.8.4 <6.0.0' 1509 1566 1567 + '@typescript-eslint/typescript-estree@8.46.1': 1568 + resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} 1569 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1570 + peerDependencies: 1571 + typescript: '>=4.8.4 <6.0.0' 1572 + 1510 1573 '@typescript-eslint/utils@8.40.0': 1511 1574 resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} 1512 1575 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 1514 1577 eslint: ^8.57.0 || ^9.0.0 1515 1578 typescript: '>=4.8.4 <6.0.0' 1516 1579 1580 + '@typescript-eslint/utils@8.46.1': 1581 + resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} 1582 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1583 + peerDependencies: 1584 + eslint: ^8.57.0 || ^9.0.0 1585 + typescript: '>=4.8.4 <6.0.0' 1586 + 1517 1587 '@typescript-eslint/visitor-keys@8.40.0': 1518 1588 resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} 1589 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1590 + 1591 + '@typescript-eslint/visitor-keys@8.46.1': 1592 + resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} 1519 1593 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1520 1594 1521 1595 '@vitejs/plugin-react@5.0.2': ··· 1748 1822 resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} 1749 1823 hasBin: true 1750 1824 1825 + birecord@0.1.1: 1826 + resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} 1827 + 1751 1828 brace-expansion@1.1.12: 1752 1829 resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 1753 1830 ··· 1866 1943 1867 1944 commander@2.20.3: 1868 1945 resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 1946 + 1947 + compare-versions@6.1.1: 1948 + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} 1869 1949 1870 1950 concat-map@0.0.1: 1871 1951 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} ··· 2055 2135 resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} 2056 2136 engines: {node: '>=6'} 2057 2137 2138 + eslint-plugin-react-dom@2.2.2: 2139 + resolution: {integrity: sha512-0M46zRkB6b4RFLOVYMwrKP/bN0fHTTt+En4k/oDel4iu3cFJtRuEy8+YjtFcf2ab+BS7MJzF1kL0Ye7oA6WcEA==} 2140 + engines: {node: '>=20.19.0'} 2141 + peerDependencies: 2142 + eslint: ^9.37.0 2143 + typescript: ^5.9.3 2144 + 2145 + eslint-plugin-react-hooks-extra@2.2.2: 2146 + resolution: {integrity: sha512-EB+6DNQW4BeYQuRGL0nkDYwkBRYMl/uoGle2ulHeMoIz2rg1OYLYTiWjUA+3O+l5nVsKzw/OU5XhTy6UzT7MsA==} 2147 + engines: {node: '>=20.0.0'} 2148 + peerDependencies: 2149 + eslint: ^9.37.0 2150 + typescript: ^5.9.3 2151 + 2058 2152 eslint-plugin-react-hooks@5.2.0: 2059 2153 resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} 2060 2154 engines: {node: '>=10'} 2061 2155 peerDependencies: 2062 2156 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 2063 2157 2158 + eslint-plugin-react-naming-convention@2.2.2: 2159 + resolution: {integrity: sha512-kvQr3gAUBoac/YwivPlR3LPczrMzrNSVDSe9Awl9tGtWLQLj/2eYzYPThCwzRTNcCuuvzQeGCL4lldl8KRePag==} 2160 + engines: {node: '>=20.19.0'} 2161 + peerDependencies: 2162 + eslint: ^9.37.0 2163 + typescript: ^5.9.3 2164 + 2165 + eslint-plugin-react-web-api@2.2.2: 2166 + resolution: {integrity: sha512-EruXKY21IbDf8r/yV99WGQ7WgS9oSYy7RPZ9SNaZe5NCfJ2ce8L5nB9rRYzpVqSxvmEyajlgogfB0REdYr6D2Q==} 2167 + engines: {node: '>=20.19.0'} 2168 + peerDependencies: 2169 + eslint: ^9.37.0 2170 + typescript: ^5.9.3 2171 + 2172 + eslint-plugin-react-x@2.2.2: 2173 + resolution: {integrity: sha512-YfRSuVttlZoXju1cM/ks8Sp5q7e5izEZXBpPdTnOVEyBu+ioNGwu0b3dfSJ+WYcNHjNdpQD2WHbHcUNlR9qQzg==} 2174 + engines: {node: '>=20.19.0'} 2175 + peerDependencies: 2176 + eslint: ^9.37.0 2177 + typescript: ^5.9.3 2178 + 2064 2179 eslint-plugin-react@7.37.5: 2065 2180 resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} 2066 2181 engines: {node: '>=4'} ··· 2425 2540 is-glob@4.0.3: 2426 2541 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2427 2542 engines: {node: '>=0.10.0'} 2543 + 2544 + is-immutable-type@5.0.1: 2545 + resolution: {integrity: sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg==} 2546 + peerDependencies: 2547 + eslint: '*' 2548 + typescript: '>=4.7.4' 2428 2549 2429 2550 is-in-ci@2.0.0: 2430 2551 resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} ··· 3092 3213 resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} 3093 3214 engines: {node: '>= 0.4'} 3094 3215 3216 + string-ts@2.2.1: 3217 + resolution: {integrity: sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw==} 3218 + 3095 3219 string-width@4.2.3: 3096 3220 resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3097 3221 engines: {node: '>=8'} ··· 3221 3345 engines: {node: '>=18.12'} 3222 3346 peerDependencies: 3223 3347 typescript: '>=4.8.4' 3348 + 3349 + ts-declaration-location@1.0.7: 3350 + resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} 3351 + peerDependencies: 3352 + typescript: '>=4.0.0' 3353 + 3354 + ts-pattern@5.8.0: 3355 + resolution: {integrity: sha512-kIjN2qmWiHnhgr5DAkAafF9fwb0T5OhMVSWrm8XEdTFnX6+wfXwYOFjeF86UZ54vduqiR7BfqScFmXSzSaH8oA==} 3224 3356 3225 3357 tslib@1.10.0: 3226 3358 resolution: {integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==} ··· 3532 3664 3533 3665 zimmerframe@1.1.4: 3534 3666 resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} 3667 + 3668 + zod@4.1.12: 3669 + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} 3535 3670 3536 3671 snapshots: 3537 3672 ··· 3761 3896 3762 3897 '@eslint-community/regexpp@4.12.1': {} 3763 3898 3899 + '@eslint-react/ast@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 3900 + dependencies: 3901 + '@eslint-react/eff': 2.2.2 3902 + '@typescript-eslint/types': 8.46.1 3903 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.2) 3904 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3905 + string-ts: 2.2.1 3906 + transitivePeerDependencies: 3907 + - eslint 3908 + - supports-color 3909 + - typescript 3910 + 3911 + '@eslint-react/core@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 3912 + dependencies: 3913 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3914 + '@eslint-react/eff': 2.2.2 3915 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3916 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3917 + '@typescript-eslint/scope-manager': 8.46.1 3918 + '@typescript-eslint/types': 8.46.1 3919 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3920 + birecord: 0.1.1 3921 + ts-pattern: 5.8.0 3922 + transitivePeerDependencies: 3923 + - eslint 3924 + - supports-color 3925 + - typescript 3926 + 3927 + '@eslint-react/eff@2.2.2': {} 3928 + 3929 + '@eslint-react/eslint-plugin@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 3930 + dependencies: 3931 + '@eslint-react/eff': 2.2.2 3932 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3933 + '@typescript-eslint/scope-manager': 8.46.1 3934 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3935 + '@typescript-eslint/types': 8.46.1 3936 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3937 + eslint: 9.34.0(jiti@2.6.1) 3938 + eslint-plugin-react-dom: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3939 + eslint-plugin-react-hooks-extra: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3940 + eslint-plugin-react-naming-convention: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3941 + eslint-plugin-react-web-api: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3942 + eslint-plugin-react-x: 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3943 + ts-api-utils: 2.1.0(typescript@5.9.2) 3944 + typescript: 5.9.2 3945 + transitivePeerDependencies: 3946 + - supports-color 3947 + 3948 + '@eslint-react/shared@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 3949 + dependencies: 3950 + '@eslint-react/eff': 2.2.2 3951 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3952 + ts-pattern: 5.8.0 3953 + zod: 4.1.12 3954 + transitivePeerDependencies: 3955 + - eslint 3956 + - supports-color 3957 + - typescript 3958 + 3959 + '@eslint-react/var@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 3960 + dependencies: 3961 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3962 + '@eslint-react/eff': 2.2.2 3963 + '@typescript-eslint/scope-manager': 8.46.1 3964 + '@typescript-eslint/types': 8.46.1 3965 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 3966 + ts-pattern: 5.8.0 3967 + transitivePeerDependencies: 3968 + - eslint 3969 + - supports-color 3970 + - typescript 3971 + 3764 3972 '@eslint/config-array@0.21.0': 3765 3973 dependencies: 3766 3974 '@eslint/object-schema': 2.1.6 ··· 5219 5427 transitivePeerDependencies: 5220 5428 - supports-color 5221 5429 5430 + '@typescript-eslint/project-service@8.46.1(typescript@5.9.2)': 5431 + dependencies: 5432 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.2) 5433 + '@typescript-eslint/types': 8.46.1 5434 + debug: 4.4.1 5435 + typescript: 5.9.2 5436 + transitivePeerDependencies: 5437 + - supports-color 5438 + 5222 5439 '@typescript-eslint/scope-manager@8.40.0': 5223 5440 dependencies: 5224 5441 '@typescript-eslint/types': 8.40.0 5225 5442 '@typescript-eslint/visitor-keys': 8.40.0 5226 5443 5444 + '@typescript-eslint/scope-manager@8.46.1': 5445 + dependencies: 5446 + '@typescript-eslint/types': 8.46.1 5447 + '@typescript-eslint/visitor-keys': 8.46.1 5448 + 5227 5449 '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)': 5450 + dependencies: 5451 + typescript: 5.9.2 5452 + 5453 + '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.2)': 5228 5454 dependencies: 5229 5455 typescript: 5.9.2 5230 5456 ··· 5240 5466 transitivePeerDependencies: 5241 5467 - supports-color 5242 5468 5469 + '@typescript-eslint/type-utils@8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 5470 + dependencies: 5471 + '@typescript-eslint/types': 8.46.1 5472 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.2) 5473 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 5474 + debug: 4.4.1 5475 + eslint: 9.34.0(jiti@2.6.1) 5476 + ts-api-utils: 2.1.0(typescript@5.9.2) 5477 + typescript: 5.9.2 5478 + transitivePeerDependencies: 5479 + - supports-color 5480 + 5243 5481 '@typescript-eslint/types@8.40.0': {} 5482 + 5483 + '@typescript-eslint/types@8.46.1': {} 5244 5484 5245 5485 '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)': 5246 5486 dependencies: ··· 5258 5498 transitivePeerDependencies: 5259 5499 - supports-color 5260 5500 5501 + '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.2)': 5502 + dependencies: 5503 + '@typescript-eslint/project-service': 8.46.1(typescript@5.9.2) 5504 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.2) 5505 + '@typescript-eslint/types': 8.46.1 5506 + '@typescript-eslint/visitor-keys': 8.46.1 5507 + debug: 4.4.1 5508 + fast-glob: 3.3.3 5509 + is-glob: 4.0.3 5510 + minimatch: 9.0.5 5511 + semver: 7.7.2 5512 + ts-api-utils: 2.1.0(typescript@5.9.2) 5513 + typescript: 5.9.2 5514 + transitivePeerDependencies: 5515 + - supports-color 5516 + 5261 5517 '@typescript-eslint/utils@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 5262 5518 dependencies: 5263 5519 '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) ··· 5269 5525 transitivePeerDependencies: 5270 5526 - supports-color 5271 5527 5528 + '@typescript-eslint/utils@8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': 5529 + dependencies: 5530 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) 5531 + '@typescript-eslint/scope-manager': 8.46.1 5532 + '@typescript-eslint/types': 8.46.1 5533 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.2) 5534 + eslint: 9.34.0(jiti@2.6.1) 5535 + typescript: 5.9.2 5536 + transitivePeerDependencies: 5537 + - supports-color 5538 + 5272 5539 '@typescript-eslint/visitor-keys@8.40.0': 5273 5540 dependencies: 5274 5541 '@typescript-eslint/types': 8.40.0 5275 5542 eslint-visitor-keys: 4.2.1 5276 5543 5544 + '@typescript-eslint/visitor-keys@8.46.1': 5545 + dependencies: 5546 + '@typescript-eslint/types': 8.46.1 5547 + eslint-visitor-keys: 4.2.1 5548 + 5277 5549 '@vitejs/plugin-react@5.0.2(vite@7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0))': 5278 5550 dependencies: 5279 5551 '@babel/core': 7.28.4 ··· 5577 5849 balanced-match@1.0.2: {} 5578 5850 5579 5851 baseline-browser-mapping@2.8.16: {} 5852 + 5853 + birecord@0.1.1: {} 5580 5854 5581 5855 brace-expansion@1.1.12: 5582 5856 dependencies: ··· 5709 5983 5710 5984 commander@2.20.3: {} 5711 5985 5986 + compare-versions@6.1.1: {} 5987 + 5712 5988 concat-map@0.0.1: {} 5713 5989 5714 5990 convert-source-map@2.0.0: {} ··· 5968 6244 5969 6245 eslint-plugin-only-warn@1.1.0: {} 5970 6246 6247 + eslint-plugin-react-dom@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6248 + dependencies: 6249 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6250 + '@eslint-react/core': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6251 + '@eslint-react/eff': 2.2.2 6252 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6253 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6254 + '@typescript-eslint/scope-manager': 8.46.1 6255 + '@typescript-eslint/types': 8.46.1 6256 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6257 + compare-versions: 6.1.1 6258 + eslint: 9.34.0(jiti@2.6.1) 6259 + string-ts: 2.2.1 6260 + ts-pattern: 5.8.0 6261 + typescript: 5.9.2 6262 + transitivePeerDependencies: 6263 + - supports-color 6264 + 6265 + eslint-plugin-react-hooks-extra@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6266 + dependencies: 6267 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6268 + '@eslint-react/core': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6269 + '@eslint-react/eff': 2.2.2 6270 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6271 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6272 + '@typescript-eslint/scope-manager': 8.46.1 6273 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6274 + '@typescript-eslint/types': 8.46.1 6275 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6276 + eslint: 9.34.0(jiti@2.6.1) 6277 + string-ts: 2.2.1 6278 + ts-pattern: 5.8.0 6279 + typescript: 5.9.2 6280 + transitivePeerDependencies: 6281 + - supports-color 6282 + 5971 6283 eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.6.1)): 5972 6284 dependencies: 5973 6285 eslint: 9.34.0(jiti@2.6.1) 5974 6286 6287 + eslint-plugin-react-naming-convention@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6288 + dependencies: 6289 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6290 + '@eslint-react/core': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6291 + '@eslint-react/eff': 2.2.2 6292 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6293 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6294 + '@typescript-eslint/scope-manager': 8.46.1 6295 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6296 + '@typescript-eslint/types': 8.46.1 6297 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6298 + eslint: 9.34.0(jiti@2.6.1) 6299 + string-ts: 2.2.1 6300 + ts-pattern: 5.8.0 6301 + typescript: 5.9.2 6302 + transitivePeerDependencies: 6303 + - supports-color 6304 + 6305 + eslint-plugin-react-web-api@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6306 + dependencies: 6307 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6308 + '@eslint-react/core': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6309 + '@eslint-react/eff': 2.2.2 6310 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6311 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6312 + '@typescript-eslint/scope-manager': 8.46.1 6313 + '@typescript-eslint/types': 8.46.1 6314 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6315 + eslint: 9.34.0(jiti@2.6.1) 6316 + string-ts: 2.2.1 6317 + ts-pattern: 5.8.0 6318 + typescript: 5.9.2 6319 + transitivePeerDependencies: 6320 + - supports-color 6321 + 6322 + eslint-plugin-react-x@2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6323 + dependencies: 6324 + '@eslint-react/ast': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6325 + '@eslint-react/core': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6326 + '@eslint-react/eff': 2.2.2 6327 + '@eslint-react/shared': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6328 + '@eslint-react/var': 2.2.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6329 + '@typescript-eslint/scope-manager': 8.46.1 6330 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6331 + '@typescript-eslint/types': 8.46.1 6332 + '@typescript-eslint/utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6333 + compare-versions: 6.1.1 6334 + eslint: 9.34.0(jiti@2.6.1) 6335 + is-immutable-type: 5.0.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6336 + string-ts: 2.2.1 6337 + ts-api-utils: 2.1.0(typescript@5.9.2) 6338 + ts-pattern: 5.8.0 6339 + typescript: 5.9.2 6340 + transitivePeerDependencies: 6341 + - supports-color 6342 + 5975 6343 eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.6.1)): 5976 6344 dependencies: 5977 6345 array-includes: 3.1.9 ··· 6394 6762 dependencies: 6395 6763 is-extglob: 2.1.1 6396 6764 6765 + is-immutable-type@5.0.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): 6766 + dependencies: 6767 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) 6768 + eslint: 9.34.0(jiti@2.6.1) 6769 + ts-api-utils: 2.1.0(typescript@5.9.2) 6770 + ts-declaration-location: 1.0.7(typescript@5.9.2) 6771 + typescript: 5.9.2 6772 + transitivePeerDependencies: 6773 + - supports-color 6774 + 6397 6775 is-in-ci@2.0.0: {} 6398 6776 6399 6777 is-map@2.0.3: {} ··· 7147 7525 es-errors: 1.3.0 7148 7526 internal-slot: 1.1.0 7149 7527 7528 + string-ts@2.2.1: {} 7529 + 7150 7530 string-width@4.2.3: 7151 7531 dependencies: 7152 7532 emoji-regex: 8.0.0 ··· 7292 7672 ts-api-utils@2.1.0(typescript@5.9.2): 7293 7673 dependencies: 7294 7674 typescript: 5.9.2 7675 + 7676 + ts-declaration-location@1.0.7(typescript@5.9.2): 7677 + dependencies: 7678 + picomatch: 4.0.3 7679 + typescript: 5.9.2 7680 + 7681 + ts-pattern@5.8.0: {} 7295 7682 7296 7683 tslib@1.10.0: {} 7297 7684 ··· 7670 8057 yoga-layout@3.2.1: {} 7671 8058 7672 8059 zimmerframe@1.1.4: {} 8060 + 8061 + zod@4.1.12: {}