Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions playground/entries/ColorPicker.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { ColorPickerProps } from '@semcore/ui/color-picker';
import type { NSColorPicker } from '@semcore/ui/color-picker';
import ColorPicker from '@semcore/ui/color-picker';
import React from 'react';

import type { JSXProps } from '../types/JSXProps';
import type { PlaygroundEntry } from '../types/Playground';
import createGithubLink from '../utils/createGHLink';

export type ColorPickerJSXProps = JSXProps<ColorPickerProps>;
export type ColorPickerJSXProps = JSXProps<NSColorPicker.Props>;

function getJSX({ handleControlChange, ...colorPickerProps }: ColorPickerJSXProps) {
return <ColorPicker {...colorPickerProps} />;
Expand Down
4 changes: 2 additions & 2 deletions playground/entries/Counter.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { CounterProps } from '@semcore/ui/counter';
import type { NSCounter } from '@semcore/ui/counter';
import Counter from '@semcore/ui/counter';
import React from 'react';

import type { JSXProps } from '../types/JSXProps';
import type { PlaygroundEntry } from '../types/Playground';
import createGithubLink from '../utils/createGHLink';

export type CounterJSXProps = JSXProps<CounterProps>;
export type CounterJSXProps = JSXProps<NSCounter.Props>;

function getJSX({ handleControlChange, ...counterProps }: CounterJSXProps) {
return <Counter {...counterProps} />;
Expand Down
21 changes: 15 additions & 6 deletions semcore/accordion/src/Accordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ import style from './style/accordion.shadow.css';
class RootAccordion extends Component<
Intergalactic.InternalTypings.InferComponentProps<NSAccordion.Component>,
typeof RootAccordion.enhance,
NSAccordion.Handlers
NSAccordion.Handlers,
{},
{},
NSAccordion.DefaultProps
> {
static displayName = 'Accordion';
static style = style;
static defaultProps = {
defaultValue: [],
use: 'secondary',
use: 'secondary' as const,
};

static enhance = [
Expand Down Expand Up @@ -209,16 +212,22 @@ function Collapse(
);
}

const Item = createComponent(RootItem, {
const Item = createComponent<
NSAccordion.Item.Component,
typeof RootItem
>(RootItem, {
Toggle,
Chevron,
ToggleButton,
Collapse,
}) as NSAccordion.Item.Component;
});

const Accordion = createComponent(RootAccordion, {
const Accordion = createComponent<
NSAccordion.Component,
typeof RootAccordion
>(RootAccordion, {
Item,
}) as unknown as NSAccordion.Component;
});

export const wrapAccordion = <PropsExtending extends {}>(
wrapper: (
Expand Down
12 changes: 8 additions & 4 deletions semcore/accordion/src/Accordion.type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@ declare namespace NSAccordion {
type Value = null | number | string | Array<number | string | null>;
type Props<V extends NSAccordion.Value = NSAccordion.Value> = FlexProps & {
/** Value for the active tab. Can be set as stroke, number, null or as array.
* @type AccordionValue
* @type NSAccordion.Value
* */
value?: V;
/**
* Value of the active tabs selected by default
* @type AccordionValue
* @type NSAccordion.Value
* @default []
*/
defaultValue?: V;
/** Called when the selection is changed
* @type (value: AccordionValue, event?: React.SyntheticEvent) => void
* @type (value: NSAccordion.Value, event?: React.SyntheticEvent) => void
* */
onChange?:
| ((value: V, event?: React.SyntheticEvent) => void)
| React.Dispatch<React.SetStateAction<V>>;
/** Animation duration of each Accordion.Item inside
* @default 350 */
* @default 200 */
duration?: number;
/**
* Changes the visual appearance of the component
Expand All @@ -38,6 +38,10 @@ declare namespace NSAccordion {
type Handlers = {
value: Props['value'];
};
type DefaultProps = {
defaultValue: Value;
use: 'secondary';
};
namespace Item {
type Props = {
/** Tab value */
Expand Down
2 changes: 1 addition & 1 deletion semcore/add-filter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"author": "UI-kit team <ui-kit-team@semrush.com>",
"license": "MIT",
"scripts": {
"build": "pnpm semcore-builder --source=ts && pnpm vite build"
"build": "pnpm semcore-builder && pnpm vite build"
},
"exports": {
"types": "./lib/types/index.d.ts",
Expand Down
20 changes: 12 additions & 8 deletions semcore/add-filter/src/AddFilter.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Flex, ScreenReaderOnly } from '@semcore/base-components';
import Button from '@semcore/button';
import { createComponent, Component, Root, lastInteraction } from '@semcore/core';
import type { WithI18nEnhanceProps } from '@semcore/core/lib/utils/enhances/i18nEnhance';
import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
import { extractFrom } from '@semcore/core/lib/utils/findComponent';
import DropdownMenu from '@semcore/dropdown-menu';
Expand All @@ -9,7 +10,7 @@ import MathPlusM from '@semcore/icon/MathPlus/m';
import type { SelectProps } from '@semcore/select';
import React from 'react';

import type { AddFilterType, AddFilterProps, AddFilterItemProps, AddFilterKey } from './AddFilter.types';
import type { AddFilterType, AddFilterProps, AddFilterItemProps, AddFilterKey, AddFilterDefaultProps } from './AddFilter.types';
import AddFilterDropdown from './components/AddFilterDropdown';
import AddFilterInput from './components/AddFilterInput';
import AddFilterSelect from './components/AddFilterSelect';
Expand Down Expand Up @@ -39,10 +40,9 @@ class RootAddFilter extends Component<
AddFilterProps,
typeof RootAddFilter.enhance,
{ visibleFilters: null },
{
visibleFilters: Exclude<AddFilterProps['visibleFilters'], undefined>;
},
AddFilterState
WithI18nEnhanceProps,
AddFilterState,
AddFilterDefaultProps
> {
addFilterTrigger = React.createRef<HTMLButtonElement>();
filtersFocusMap: Map<string | undefined, HTMLElement> = new Map();
Expand All @@ -51,7 +51,8 @@ class RootAddFilter extends Component<

static displayName = 'AddFilter';
static enhance = [i18nEnhance(localizedMessages)] as const;
static defaultProps = {

static defaultProps: AddFilterDefaultProps = {
i18n: localizedMessages,
locale: 'en',
defaultVisibleFilters: [],
Expand Down Expand Up @@ -305,10 +306,13 @@ function ClearAllFilters({ hasFilterData, clearAll, getI18nText }: ClearAllFilte
: null;
}

const AddFilter = createComponent(RootAddFilter, {
const AddFilter = createComponent<
AddFilterType,
typeof RootAddFilter
>(RootAddFilter, {
Select: AddFilterSelect,
Input: AddFilterInput,
Dropdown: AddFilterDropdown,
}) as AddFilterType;
});

export default AddFilter;
7 changes: 7 additions & 0 deletions semcore/add-filter/src/AddFilter.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import type { DropdownTriggerProps } from '@semcore/dropdown';
import type Input from '@semcore/input';
import type Select from '@semcore/select';

import type { LocalizedMessages } from './translations/__intergalactic-dynamic-locales';

export type AddFilterKey = string;

export type AddFilterItemProps = {
Expand Down Expand Up @@ -74,6 +76,11 @@ export type AddFilterProps = FlexProps & {
*/
onVisibleFiltersChange?: (visibleFilters: AddFilterKey[]) => void;
};
export type AddFilterDefaultProps = {
i18n: LocalizedMessages;
locale: 'en';
defaultVisibleFilters: AddFilterProps['visibleFilters'];
};

export type AddFilterType = Intergalactic.Component<'div', AddFilterProps> & {
Dropdown: typeof AddFilterDropdownType;
Expand Down
27 changes: 19 additions & 8 deletions semcore/add-filter/src/components/AddFilterDropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,30 @@ import { createComponent, Component, Root } from '@semcore/core';
import Dropdown from '@semcore/dropdown';
import React from 'react';

import type { AddFilterItemProps } from '../AddFilter.types';
import type { AddFilterDropdownType, AddFilterItemProps } from '../AddFilter.types';

type AsPropsTypeWithHandlers<T> = T & {
onClear: () => void;
unsetFocusRef: () => void;
setFocusRef: (el: HTMLElement) => {};
};

class AddFilterDropdownRoot extends Component<AddFilterItemProps, [], { visible: null }> {
type DefaultProps = {
defaultVisible: true;
};
class AddFilterDropdownRoot extends Component<
AddFilterItemProps,
[],
{ visible: null },
{},
{},
DefaultProps
> {
static displayName = 'AddFilterDropdown';

static defaultProps = () => {
return {
defaultVisible: true,
};
};
static defaultProps = {
defaultVisible: true,
} as const;

uncontrolledProps() {
return {
Expand Down Expand Up @@ -64,7 +72,10 @@ class AddFilterDropdownRoot extends Component<AddFilterItemProps, [], { visible:
}
}

const AddFilterDropdown = createComponent(AddFilterDropdownRoot, {
const AddFilterDropdown = createComponent<
typeof AddFilterDropdownType,
typeof AddFilterDropdownRoot
>(AddFilterDropdownRoot, {
Trigger: Dropdown.Trigger,
Popper: Dropdown.Popper,
});
Expand Down
7 changes: 5 additions & 2 deletions semcore/add-filter/src/components/AddFilterInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Input from '@semcore/input';
import type { InputValueProps } from '@semcore/input';
import React from 'react';

import type { AddFilterItemProps } from '../AddFilter.types';
import type { AddFilterInputType, AddFilterItemProps } from '../AddFilter.types';

type AsPropsWithOnClear<T> = T & {
onClear: () => void;
Expand Down Expand Up @@ -55,7 +55,10 @@ function Clear() {
return <Root render={ButtonLink} />;
}

const AddFilterInput = createComponent(AddFilterInputRoot, {
const AddFilterInput = createComponent<
typeof AddFilterInputType,
typeof AddFilterInputRoot
>(AddFilterInputRoot, {
Value: Input.Value,
Addon: Input.Addon,
Clear,
Expand Down
29 changes: 21 additions & 8 deletions semcore/add-filter/src/components/AddFilterSelect.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,24 @@ type AsPropsWithOnClear<T> = T & {
unsetFocusRef: () => void;
setFocusRef: (el: HTMLElement) => {};
};
class AddFilterSelectRoot extends Component<SelectProps & AddFilterItemProps, [], { visible: null }> {

type DefaultProps = {
defaultVisible: true;
};

class AddFilterSelectRoot extends Component<
SelectProps & AddFilterItemProps,
[],
{ visible: null },
{},
{},
DefaultProps
> {
static displayName = 'AddFilterSelect';

static defaultProps = () => {
return {
defaultVisible: true,
};
};
static defaultProps = {
defaultVisible: true,
} as const;

componentWillUnmount() {
this.asProps.onUnmount?.();
Expand Down Expand Up @@ -64,7 +74,10 @@ class AddFilterSelectRoot extends Component<SelectProps & AddFilterItemProps, []
}
}

const AddFilterSelect = createComponent(AddFilterSelectRoot, {
const AddFilterSelect: typeof AddFilterSelectType = createComponent<
typeof AddFilterSelectType,
typeof AddFilterSelectRoot
>(AddFilterSelectRoot, {
Trigger: Select.Trigger,
Menu: Select.Menu,
Option: [
Expand All @@ -76,6 +89,6 @@ const AddFilterSelect = createComponent(AddFilterSelectRoot, {
List: Select.List,
Popper: Select.Popper,
InputSearch: Select.InputSearch,
}) as typeof AddFilterSelectType;
});

export default AddFilterSelect;
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,5 @@ export const localizedMessages = {
pl,
sv,
};

export type LocalizedMessages = typeof localizedMessages;
8 changes: 7 additions & 1 deletion semcore/badge/src/Badge.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { BoxProps } from '@semcore/base-components';
import { Box } from '@semcore/base-components';
import type { Intergalactic } from '@semcore/core';
import { createComponent, Component, Root, sstyled } from '@semcore/core';
import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
import resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';
Expand Down Expand Up @@ -49,6 +50,8 @@ export type BadgeProps = BadgeMargins & {
color?: 'white' | 'gray20' | string;
};

type BadgeComponent = Intergalactic.Component<'span', BadgeProps>;

class RootBadge extends Component<BadgeProps, typeof RootBadge.enhance> {
static displayName = 'Badge';
static style = style;
Expand Down Expand Up @@ -115,4 +118,7 @@ class RootBadge extends Component<BadgeProps, typeof RootBadge.enhance> {
}
}

export const Badge = createComponent<'span', BadgeProps>(RootBadge);
export const Badge = createComponent<
BadgeComponent,
typeof RootBadge
>(RootBadge);
Loading
Loading