@crossed/ui
Version:
A universal & performant styling library for React Native, Next.js & React
56 lines (46 loc) • 1.42 kB
text/typescript
/**
* Copyright (c) Paymium.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root of this projects source tree.
*/
import { createScope } from '@crossed/core';
import { Orientation, createCollection } from '@crossed/primitive';
import { createContext } from 'react';
import { ButtonProps } from './types';
export type ContextButton = {
id: string;
};
export const [Provider, useContext] = createScope<ContextButton>(
{} as ContextButton
);
export const buttonContext = createContext<
Pick<ButtonProps, 'variant' | 'size' | 'disabled'> & {
state?: {
active?: boolean;
hover?: boolean;
};
textId: string;
// eslint-disable-next-line no-unused-vars
setTextId: (p: string) => void;
}
>({} as any);
type ButtonGroupContext = {
orientation: Orientation;
grouped?: boolean;
};
export const [ProviderGroup, useContextGroup] = createScope<ButtonGroupContext>(
{ orientation: 'horizontal' } as ButtonGroupContext
);
const GROUP_NAME = 'ButtonGroup';
type ItemData = { id: string };
const [ButtonGroupCollection, useButtonGroupCollection] = createCollection<
HTMLSpanElement,
ItemData
>(GROUP_NAME);
export const {
ItemSlot: ButtonGroupCollectionItemSlot,
Provider: ButtonGroupCollectionProvider,
Slot: ButtonGroupCollectionSlot,
} = ButtonGroupCollection;
export { ButtonGroupCollection, useButtonGroupCollection };