@newtonedev/components 0.1.3 → 0.1.5
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.
- package/dist/composites/actions/Button/Button.d.ts +37 -0
- package/dist/composites/actions/Button/Button.d.ts.map +1 -0
- package/dist/composites/actions/Button/Button.styles.d.ts +63 -0
- package/dist/composites/actions/Button/Button.styles.d.ts.map +1 -0
- package/dist/{Button → composites/actions/Button}/Button.types.d.ts +12 -3
- package/dist/composites/actions/Button/Button.types.d.ts.map +1 -0
- package/dist/composites/actions/Button/index.d.ts.map +1 -0
- package/dist/composites/form-controls/Select/Select.d.ts.map +1 -0
- package/dist/{Select → composites/form-controls/Select}/Select.styles.d.ts +1 -1
- package/dist/composites/form-controls/Select/Select.styles.d.ts.map +1 -0
- package/dist/composites/form-controls/Select/Select.types.d.ts.map +1 -0
- package/dist/composites/form-controls/Select/SelectOption.d.ts.map +1 -0
- package/dist/composites/form-controls/Select/index.d.ts.map +1 -0
- package/dist/composites/form-controls/Select/useSelect.d.ts.map +1 -0
- package/dist/composites/form-controls/TextInput/TextInput.d.ts.map +1 -0
- package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.styles.d.ts +1 -1
- package/dist/composites/form-controls/TextInput/TextInput.styles.d.ts.map +1 -0
- package/dist/composites/form-controls/TextInput/TextInput.types.d.ts.map +1 -0
- package/dist/composites/form-controls/TextInput/index.d.ts.map +1 -0
- package/dist/composites/form-controls/Toggle/Toggle.d.ts.map +1 -0
- package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.styles.d.ts +1 -1
- package/dist/composites/form-controls/Toggle/Toggle.styles.d.ts.map +1 -0
- package/dist/composites/form-controls/Toggle/Toggle.types.d.ts.map +1 -0
- package/dist/composites/form-controls/Toggle/index.d.ts.map +1 -0
- package/dist/composites/layout/AppShell/AppShell.d.ts.map +1 -0
- package/dist/{AppShell → composites/layout/AppShell}/AppShell.styles.d.ts +1 -1
- package/dist/composites/layout/AppShell/AppShell.styles.d.ts.map +1 -0
- package/dist/composites/layout/AppShell/AppShell.types.d.ts.map +1 -0
- package/dist/composites/layout/AppShell/index.d.ts.map +1 -0
- package/dist/composites/layout/Card/Card.d.ts.map +1 -0
- package/dist/{Card → composites/layout/Card}/Card.styles.d.ts +1 -1
- package/dist/composites/layout/Card/Card.styles.d.ts.map +1 -0
- package/dist/{Card → composites/layout/Card}/Card.types.d.ts +1 -1
- package/dist/composites/layout/Card/Card.types.d.ts.map +1 -0
- package/dist/composites/layout/Card/index.d.ts.map +1 -0
- package/dist/composites/layout/Navbar/Navbar.d.ts.map +1 -0
- package/dist/{Navbar → composites/layout/Navbar}/Navbar.styles.d.ts +1 -1
- package/dist/composites/layout/Navbar/Navbar.styles.d.ts.map +1 -0
- package/dist/composites/layout/Navbar/Navbar.types.d.ts.map +1 -0
- package/dist/composites/layout/Navbar/index.d.ts.map +1 -0
- package/dist/composites/layout/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.styles.d.ts +1 -1
- package/dist/composites/layout/Sidebar/Sidebar.styles.d.ts.map +1 -0
- package/dist/composites/layout/Sidebar/Sidebar.types.d.ts.map +1 -0
- package/dist/composites/layout/Sidebar/index.d.ts.map +1 -0
- package/dist/composites/overlays/Popover/Popover.d.ts.map +1 -0
- package/dist/{Popover → composites/overlays/Popover}/Popover.styles.d.ts +1 -1
- package/dist/composites/overlays/Popover/Popover.styles.d.ts.map +1 -0
- package/dist/composites/overlays/Popover/Popover.types.d.ts.map +1 -0
- package/dist/composites/overlays/Popover/index.d.ts.map +1 -0
- package/dist/composites/overlays/Popover/usePopover.d.ts.map +1 -0
- package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.d.ts.map +1 -0
- package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.styles.d.ts +1 -1
- package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.d.ts.map +1 -0
- package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.types.d.ts.map +1 -0
- package/dist/composites/range-inputs/ColorScaleSlider/index.d.ts.map +1 -0
- package/dist/composites/range-inputs/HueSlider/HueSlider.d.ts.map +1 -0
- package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.styles.d.ts +1 -1
- package/dist/composites/range-inputs/HueSlider/HueSlider.styles.d.ts.map +1 -0
- package/dist/composites/range-inputs/HueSlider/HueSlider.types.d.ts.map +1 -0
- package/dist/composites/range-inputs/HueSlider/index.d.ts.map +1 -0
- package/dist/composites/range-inputs/Slider/Slider.d.ts.map +1 -0
- package/dist/{Slider → composites/range-inputs/Slider}/Slider.styles.d.ts +1 -1
- package/dist/composites/range-inputs/Slider/Slider.styles.d.ts.map +1 -0
- package/dist/composites/range-inputs/Slider/Slider.types.d.ts.map +1 -0
- package/dist/composites/range-inputs/Slider/index.d.ts.map +1 -0
- package/dist/index.cjs +999 -620
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +26 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +955 -576
- package/dist/index.js.map +1 -1
- package/dist/primitives/Icon/Icon.d.ts.map +1 -1
- package/dist/primitives/Wrapper/Wrapper.types.d.ts +1 -1
- package/dist/primitives/Wrapper/Wrapper.types.d.ts.map +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/tokens/computeTokens.d.ts.map +1 -1
- package/dist/tokens/types.d.ts +10 -0
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/tokens/useTokens.d.ts +20 -2
- package/dist/tokens/useTokens.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/composites/actions/Button/Button.styles.ts +365 -0
- package/src/composites/actions/Button/Button.tsx +115 -0
- package/src/{Button → composites/actions/Button}/Button.types.ts +14 -3
- package/src/{Select → composites/form-controls/Select}/Select.styles.ts +1 -1
- package/src/{Select → composites/form-controls/Select}/Select.tsx +4 -4
- package/src/{Select → composites/form-controls/Select}/SelectOption.tsx +2 -2
- package/src/{TextInput → composites/form-controls/TextInput}/TextInput.styles.ts +1 -1
- package/src/{TextInput → composites/form-controls/TextInput}/TextInput.tsx +1 -1
- package/src/{Toggle → composites/form-controls/Toggle}/Toggle.styles.ts +1 -1
- package/src/{Toggle → composites/form-controls/Toggle}/Toggle.tsx +1 -1
- package/src/{AppShell → composites/layout/AppShell}/AppShell.styles.ts +1 -1
- package/src/{AppShell → composites/layout/AppShell}/AppShell.tsx +1 -1
- package/src/{Card → composites/layout/Card}/Card.styles.ts +1 -1
- package/src/{Card → composites/layout/Card}/Card.tsx +1 -1
- package/src/{Card → composites/layout/Card}/Card.types.ts +1 -1
- package/src/{Navbar → composites/layout/Navbar}/Navbar.styles.ts +1 -1
- package/src/{Navbar → composites/layout/Navbar}/Navbar.tsx +1 -1
- package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.styles.ts +1 -1
- package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.tsx +1 -1
- package/src/{Popover → composites/overlays/Popover}/Popover.styles.ts +1 -1
- package/src/{Popover → composites/overlays/Popover}/Popover.tsx +1 -1
- package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.styles.ts +1 -1
- package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.tsx +1 -1
- package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.styles.ts +1 -1
- package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.tsx +1 -1
- package/src/{Slider → composites/range-inputs/Slider}/Slider.styles.ts +1 -1
- package/src/{Slider → composites/range-inputs/Slider}/Slider.tsx +1 -1
- package/src/index.ts +27 -27
- package/src/primitives/Icon/Icon.tsx +16 -1
- package/src/primitives/Wrapper/Wrapper.types.ts +1 -1
- package/src/registry/registry.ts +213 -1
- package/src/tokens/computeTokens.ts +16 -0
- package/src/tokens/types.ts +10 -0
- package/src/tokens/useTokens.ts +25 -3
- package/dist/AppShell/AppShell.d.ts.map +0 -1
- package/dist/AppShell/AppShell.styles.d.ts.map +0 -1
- package/dist/AppShell/AppShell.types.d.ts.map +0 -1
- package/dist/AppShell/index.d.ts.map +0 -1
- package/dist/Button/Button.d.ts +0 -28
- package/dist/Button/Button.d.ts.map +0 -1
- package/dist/Button/Button.styles.d.ts +0 -46
- package/dist/Button/Button.styles.d.ts.map +0 -1
- package/dist/Button/Button.types.d.ts.map +0 -1
- package/dist/Button/index.d.ts.map +0 -1
- package/dist/Card/Card.d.ts.map +0 -1
- package/dist/Card/Card.styles.d.ts.map +0 -1
- package/dist/Card/Card.types.d.ts.map +0 -1
- package/dist/Card/index.d.ts.map +0 -1
- package/dist/ColorScaleSlider/ColorScaleSlider.d.ts.map +0 -1
- package/dist/ColorScaleSlider/ColorScaleSlider.styles.d.ts.map +0 -1
- package/dist/ColorScaleSlider/ColorScaleSlider.types.d.ts.map +0 -1
- package/dist/ColorScaleSlider/index.d.ts.map +0 -1
- package/dist/HueSlider/HueSlider.d.ts.map +0 -1
- package/dist/HueSlider/HueSlider.styles.d.ts.map +0 -1
- package/dist/HueSlider/HueSlider.types.d.ts.map +0 -1
- package/dist/HueSlider/index.d.ts.map +0 -1
- package/dist/Navbar/Navbar.d.ts.map +0 -1
- package/dist/Navbar/Navbar.styles.d.ts.map +0 -1
- package/dist/Navbar/Navbar.types.d.ts.map +0 -1
- package/dist/Navbar/index.d.ts.map +0 -1
- package/dist/Popover/Popover.d.ts.map +0 -1
- package/dist/Popover/Popover.styles.d.ts.map +0 -1
- package/dist/Popover/Popover.types.d.ts.map +0 -1
- package/dist/Popover/index.d.ts.map +0 -1
- package/dist/Popover/usePopover.d.ts.map +0 -1
- package/dist/Select/Select.d.ts.map +0 -1
- package/dist/Select/Select.styles.d.ts.map +0 -1
- package/dist/Select/Select.types.d.ts.map +0 -1
- package/dist/Select/SelectOption.d.ts.map +0 -1
- package/dist/Select/index.d.ts.map +0 -1
- package/dist/Select/useSelect.d.ts.map +0 -1
- package/dist/Sidebar/Sidebar.d.ts.map +0 -1
- package/dist/Sidebar/Sidebar.styles.d.ts.map +0 -1
- package/dist/Sidebar/Sidebar.types.d.ts.map +0 -1
- package/dist/Sidebar/index.d.ts.map +0 -1
- package/dist/Slider/Slider.d.ts.map +0 -1
- package/dist/Slider/Slider.styles.d.ts.map +0 -1
- package/dist/Slider/Slider.types.d.ts.map +0 -1
- package/dist/Slider/index.d.ts.map +0 -1
- package/dist/TextInput/TextInput.d.ts.map +0 -1
- package/dist/TextInput/TextInput.styles.d.ts.map +0 -1
- package/dist/TextInput/TextInput.types.d.ts.map +0 -1
- package/dist/TextInput/index.d.ts.map +0 -1
- package/dist/Toggle/Toggle.d.ts.map +0 -1
- package/dist/Toggle/Toggle.styles.d.ts.map +0 -1
- package/dist/Toggle/Toggle.types.d.ts.map +0 -1
- package/dist/Toggle/index.d.ts.map +0 -1
- package/src/Button/Button.styles.ts +0 -133
- package/src/Button/Button.tsx +0 -86
- /package/dist/{Button → composites/actions/Button}/index.d.ts +0 -0
- /package/dist/{Select → composites/form-controls/Select}/Select.d.ts +0 -0
- /package/dist/{Select → composites/form-controls/Select}/Select.types.d.ts +0 -0
- /package/dist/{Select → composites/form-controls/Select}/SelectOption.d.ts +0 -0
- /package/dist/{Select → composites/form-controls/Select}/index.d.ts +0 -0
- /package/dist/{Select → composites/form-controls/Select}/useSelect.d.ts +0 -0
- /package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.d.ts +0 -0
- /package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.types.d.ts +0 -0
- /package/dist/{TextInput → composites/form-controls/TextInput}/index.d.ts +0 -0
- /package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.d.ts +0 -0
- /package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.types.d.ts +0 -0
- /package/dist/{Toggle → composites/form-controls/Toggle}/index.d.ts +0 -0
- /package/dist/{AppShell → composites/layout/AppShell}/AppShell.d.ts +0 -0
- /package/dist/{AppShell → composites/layout/AppShell}/AppShell.types.d.ts +0 -0
- /package/dist/{AppShell → composites/layout/AppShell}/index.d.ts +0 -0
- /package/dist/{Card → composites/layout/Card}/Card.d.ts +0 -0
- /package/dist/{Card → composites/layout/Card}/index.d.ts +0 -0
- /package/dist/{Navbar → composites/layout/Navbar}/Navbar.d.ts +0 -0
- /package/dist/{Navbar → composites/layout/Navbar}/Navbar.types.d.ts +0 -0
- /package/dist/{Navbar → composites/layout/Navbar}/index.d.ts +0 -0
- /package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.d.ts +0 -0
- /package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.types.d.ts +0 -0
- /package/dist/{Sidebar → composites/layout/Sidebar}/index.d.ts +0 -0
- /package/dist/{Popover → composites/overlays/Popover}/Popover.d.ts +0 -0
- /package/dist/{Popover → composites/overlays/Popover}/Popover.types.d.ts +0 -0
- /package/dist/{Popover → composites/overlays/Popover}/index.d.ts +0 -0
- /package/dist/{Popover → composites/overlays/Popover}/usePopover.d.ts +0 -0
- /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.d.ts +0 -0
- /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.types.d.ts +0 -0
- /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/index.d.ts +0 -0
- /package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.d.ts +0 -0
- /package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.types.d.ts +0 -0
- /package/dist/{HueSlider → composites/range-inputs/HueSlider}/index.d.ts +0 -0
- /package/dist/{Slider → composites/range-inputs/Slider}/Slider.d.ts +0 -0
- /package/dist/{Slider → composites/range-inputs/Slider}/Slider.types.d.ts +0 -0
- /package/dist/{Slider → composites/range-inputs/Slider}/index.d.ts +0 -0
- /package/src/{Button → composites/actions/Button}/index.ts +0 -0
- /package/src/{Select → composites/form-controls/Select}/Select.types.ts +0 -0
- /package/src/{Select → composites/form-controls/Select}/index.ts +0 -0
- /package/src/{Select → composites/form-controls/Select}/useSelect.ts +0 -0
- /package/src/{TextInput → composites/form-controls/TextInput}/TextInput.types.ts +0 -0
- /package/src/{TextInput → composites/form-controls/TextInput}/index.ts +0 -0
- /package/src/{Toggle → composites/form-controls/Toggle}/Toggle.types.ts +0 -0
- /package/src/{Toggle → composites/form-controls/Toggle}/index.ts +0 -0
- /package/src/{AppShell → composites/layout/AppShell}/AppShell.types.ts +0 -0
- /package/src/{AppShell → composites/layout/AppShell}/index.ts +0 -0
- /package/src/{Card → composites/layout/Card}/index.ts +0 -0
- /package/src/{Navbar → composites/layout/Navbar}/Navbar.types.ts +0 -0
- /package/src/{Navbar → composites/layout/Navbar}/index.ts +0 -0
- /package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.types.ts +0 -0
- /package/src/{Sidebar → composites/layout/Sidebar}/index.ts +0 -0
- /package/src/{Popover → composites/overlays/Popover}/Popover.types.ts +0 -0
- /package/src/{Popover → composites/overlays/Popover}/index.ts +0 -0
- /package/src/{Popover → composites/overlays/Popover}/usePopover.ts +0 -0
- /package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.types.ts +0 -0
- /package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/index.ts +0 -0
- /package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.types.ts +0 -0
- /package/src/{HueSlider → composites/range-inputs/HueSlider}/index.ts +0 -0
- /package/src/{Slider → composites/range-inputs/Slider}/Slider.types.ts +0 -0
- /package/src/{Slider → composites/range-inputs/Slider}/index.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Pressable, Text, View } from 'react-native';
|
|
3
3
|
import type { SelectOption as SelectOptionType, SelectProps } from './Select.types';
|
|
4
|
-
import { useTokens } from '
|
|
5
|
-
import { Icon } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
|
+
import { Icon } from '../../../primitives/Icon/Icon';
|
|
6
6
|
import { srgbToHex } from 'newtone';
|
|
7
7
|
|
|
8
8
|
interface SelectOptionRowProps {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import { srgbToHex } from 'newtone';
|
|
3
|
-
import type { ResolvedTokens } from '
|
|
3
|
+
import type { ResolvedTokens } from '../../../tokens/types';
|
|
4
4
|
|
|
5
5
|
export function getTextInputStyles(tokens: ResolvedTokens, disabled: boolean) {
|
|
6
6
|
return StyleSheet.create({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, Text, TextInput as RNTextInput } from 'react-native';
|
|
3
3
|
import type { TextInputProps } from './TextInput.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getTextInputStyles } from './TextInput.styles';
|
|
6
6
|
import { srgbToHex } from 'newtone';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, Text, Pressable } from 'react-native';
|
|
3
3
|
import type { ToggleProps } from './Toggle.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getToggleStyles } from './Toggle.styles';
|
|
6
6
|
|
|
7
7
|
export function Toggle({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import { srgbToHex } from 'newtone';
|
|
3
|
-
import type { ResolvedTokens } from '
|
|
3
|
+
import type { ResolvedTokens } from '../../../tokens/types';
|
|
4
4
|
|
|
5
5
|
export function getAppShellStyles(tokens: ResolvedTokens) {
|
|
6
6
|
return StyleSheet.create({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import type { AppShellProps } from './AppShell.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getAppShellStyles } from './AppShell.styles';
|
|
6
6
|
|
|
7
7
|
export function AppShell({ sidebar, children }: AppShellProps) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import { srgbToHex } from 'newtone';
|
|
3
|
-
import type { ResolvedTokens } from '
|
|
3
|
+
import type { ResolvedTokens } from '../../../tokens/types';
|
|
4
4
|
|
|
5
5
|
export function getCardStyles(tokens: ResolvedTokens, disabled: boolean) {
|
|
6
6
|
return StyleSheet.create({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import type { CardProps } from './Card.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getCardStyles } from './Card.styles';
|
|
6
6
|
|
|
7
7
|
export function Card({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import { srgbToHex } from 'newtone';
|
|
3
|
-
import type { ResolvedTokens } from '
|
|
3
|
+
import type { ResolvedTokens } from '../../../tokens/types';
|
|
4
4
|
|
|
5
5
|
interface NavbarStyleInput {
|
|
6
6
|
readonly tokens: ResolvedTokens;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import type { NavbarProps } from './Navbar.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getNavbarStyles } from './Navbar.styles';
|
|
6
6
|
|
|
7
7
|
export function Navbar({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import { srgbToHex } from 'newtone';
|
|
3
|
-
import type { ResolvedTokens } from '
|
|
3
|
+
import type { ResolvedTokens } from '../../../tokens/types';
|
|
4
4
|
|
|
5
5
|
interface SidebarStyleInput {
|
|
6
6
|
readonly tokens: ResolvedTokens;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, ScrollView } from 'react-native';
|
|
3
3
|
import type { SidebarProps } from './Sidebar.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getSidebarStyles } from './Sidebar.styles';
|
|
6
6
|
|
|
7
7
|
export function Sidebar({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import type { PopoverProps } from './Popover.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getPopoverStyles } from './Popover.styles';
|
|
6
6
|
|
|
7
7
|
// Module-level: set of close callbacks for all open Popovers.
|
package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.tsx
RENAMED
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { View, Text, PanResponder, Animated } from 'react-native';
|
|
3
3
|
import { srgbToHex } from 'newtone';
|
|
4
4
|
import type { ColorScaleSliderProps } from './ColorScaleSlider.types';
|
|
5
|
-
import { useTokens } from '
|
|
5
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
6
6
|
import { getColorScaleSliderStyles, THUMB_SIZE } from './ColorScaleSlider.styles';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, Text, TextInput, PanResponder } from 'react-native';
|
|
3
3
|
import type { HueSliderProps } from './HueSlider.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import {
|
|
6
6
|
getHueSliderStyles,
|
|
7
7
|
buildHueSegments,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, Text, TextInput, PanResponder } from 'react-native';
|
|
3
3
|
import type { SliderProps } from './Slider.types';
|
|
4
|
-
import { useTokens } from '
|
|
4
|
+
import { useTokens } from '../../../tokens/useTokens';
|
|
5
5
|
import { getSliderStyles, THUMB_SIZE } from './Slider.styles';
|
|
6
6
|
|
|
7
7
|
export function Slider({
|
package/src/index.ts
CHANGED
|
@@ -20,12 +20,12 @@ export { useTokens } from './tokens/useTokens';
|
|
|
20
20
|
export { computeTokens } from './tokens/computeTokens';
|
|
21
21
|
export type { ResolvedTokens } from './tokens/types';
|
|
22
22
|
|
|
23
|
-
// Components
|
|
24
|
-
export { Button } from './Button/Button';
|
|
25
|
-
export type { ButtonProps, ButtonVariant, ButtonSize, ButtonIconPosition } from './Button/Button.types';
|
|
23
|
+
// Composite Components
|
|
24
|
+
export { Button } from './composites/actions/Button/Button';
|
|
25
|
+
export type { ButtonProps, ButtonVariant, ButtonSemantic, ButtonSize, ButtonIconPosition } from './composites/actions/Button/Button.types';
|
|
26
26
|
|
|
27
|
-
export { Card } from './Card/Card';
|
|
28
|
-
export type { CardProps } from './Card/Card.types';
|
|
27
|
+
export { Card } from './composites/layout/Card/Card';
|
|
28
|
+
export type { CardProps } from './composites/layout/Card/Card.types';
|
|
29
29
|
|
|
30
30
|
export { useFocusVisible } from './primitives/useFocusVisible';
|
|
31
31
|
export type { FocusVisibleResult } from './primitives/useFocusVisible';
|
|
@@ -52,28 +52,28 @@ export type {
|
|
|
52
52
|
} from './primitives/Frame/Frame.types';
|
|
53
53
|
export type { ResolvedCorners } from './primitives/Frame/Frame.utils';
|
|
54
54
|
|
|
55
|
-
export { TextInput } from './TextInput/TextInput';
|
|
56
|
-
export type { TextInputProps } from './TextInput/TextInput.types';
|
|
55
|
+
export { TextInput } from './composites/form-controls/TextInput/TextInput';
|
|
56
|
+
export type { TextInputProps } from './composites/form-controls/TextInput/TextInput.types';
|
|
57
57
|
|
|
58
|
-
export { Popover } from './Popover/Popover';
|
|
59
|
-
export type { PopoverProps, PopoverPlacement } from './Popover/Popover.types';
|
|
60
|
-
export { usePopover } from './Popover/usePopover';
|
|
58
|
+
export { Popover } from './composites/overlays/Popover/Popover';
|
|
59
|
+
export type { PopoverProps, PopoverPlacement } from './composites/overlays/Popover/Popover.types';
|
|
60
|
+
export { usePopover } from './composites/overlays/Popover/usePopover';
|
|
61
61
|
|
|
62
|
-
export { Select } from './Select/Select';
|
|
63
|
-
export type { SelectProps, SelectOption, SelectOptionGroup, SelectItem } from './Select/Select.types';
|
|
64
|
-
export { isOptionGroup } from './Select/Select.types';
|
|
62
|
+
export { Select } from './composites/form-controls/Select/Select';
|
|
63
|
+
export type { SelectProps, SelectOption, SelectOptionGroup, SelectItem } from './composites/form-controls/Select/Select.types';
|
|
64
|
+
export { isOptionGroup } from './composites/form-controls/Select/Select.types';
|
|
65
65
|
|
|
66
|
-
export { Toggle } from './Toggle/Toggle';
|
|
67
|
-
export type { ToggleProps } from './Toggle/Toggle.types';
|
|
66
|
+
export { Toggle } from './composites/form-controls/Toggle/Toggle';
|
|
67
|
+
export type { ToggleProps } from './composites/form-controls/Toggle/Toggle.types';
|
|
68
68
|
|
|
69
|
-
export { Slider } from './Slider/Slider';
|
|
70
|
-
export type { SliderProps } from './Slider/Slider.types';
|
|
69
|
+
export { Slider } from './composites/range-inputs/Slider/Slider';
|
|
70
|
+
export type { SliderProps } from './composites/range-inputs/Slider/Slider.types';
|
|
71
71
|
|
|
72
|
-
export { HueSlider } from './HueSlider/HueSlider';
|
|
73
|
-
export type { HueSliderProps } from './HueSlider/HueSlider.types';
|
|
72
|
+
export { HueSlider } from './composites/range-inputs/HueSlider/HueSlider';
|
|
73
|
+
export type { HueSliderProps } from './composites/range-inputs/HueSlider/HueSlider.types';
|
|
74
74
|
|
|
75
|
-
export { ColorScaleSlider } from './ColorScaleSlider/ColorScaleSlider';
|
|
76
|
-
export type { ColorScaleSliderProps } from './ColorScaleSlider/ColorScaleSlider.types';
|
|
75
|
+
export { ColorScaleSlider } from './composites/range-inputs/ColorScaleSlider/ColorScaleSlider';
|
|
76
|
+
export type { ColorScaleSliderProps } from './composites/range-inputs/ColorScaleSlider/ColorScaleSlider.types';
|
|
77
77
|
|
|
78
78
|
export { Icon } from './primitives/Icon/Icon';
|
|
79
79
|
export type { IconProps } from './primitives/Icon/Icon.types';
|
|
@@ -92,14 +92,14 @@ export type {
|
|
|
92
92
|
TextAlign,
|
|
93
93
|
} from './primitives/Text/Text.types';
|
|
94
94
|
|
|
95
|
-
export { AppShell } from './AppShell/AppShell';
|
|
96
|
-
export type { AppShellProps } from './AppShell/AppShell.types';
|
|
95
|
+
export { AppShell } from './composites/layout/AppShell/AppShell';
|
|
96
|
+
export type { AppShellProps } from './composites/layout/AppShell/AppShell.types';
|
|
97
97
|
|
|
98
|
-
export { Sidebar } from './Sidebar/Sidebar';
|
|
99
|
-
export type { SidebarProps } from './Sidebar/Sidebar.types';
|
|
98
|
+
export { Sidebar } from './composites/layout/Sidebar/Sidebar';
|
|
99
|
+
export type { SidebarProps } from './composites/layout/Sidebar/Sidebar.types';
|
|
100
100
|
|
|
101
|
-
export { Navbar } from './Navbar/Navbar';
|
|
102
|
-
export type { NavbarProps } from './Navbar/Navbar.types';
|
|
101
|
+
export { Navbar } from './composites/layout/Navbar/Navbar';
|
|
102
|
+
export type { NavbarProps } from './composites/layout/Navbar/Navbar.types';
|
|
103
103
|
|
|
104
104
|
// Component registry + code generation
|
|
105
105
|
export type {
|
|
@@ -42,8 +42,20 @@ export function Icon({
|
|
|
42
42
|
const iconStyle = useMemo<TextStyle>(() => {
|
|
43
43
|
// Use the provided size, or fall back to the theme's default text size.
|
|
44
44
|
const fontSize = size ?? tokens.typography.size.base;
|
|
45
|
+
|
|
46
|
+
// Round to nearest Material Symbols optical size (20, 24, 40, 48)
|
|
47
|
+
// for optimal stroke weight and detail rendering.
|
|
48
|
+
const getOpticalSize = (size: number): number => {
|
|
49
|
+
if (size <= 22) return 20;
|
|
50
|
+
if (size <= 32) return 24;
|
|
51
|
+
if (size <= 44) return 40;
|
|
52
|
+
return 48;
|
|
53
|
+
};
|
|
54
|
+
|
|
45
55
|
// Optical size adjusts stroke weight for readability at small sizes.
|
|
46
|
-
|
|
56
|
+
// Use explicit opticalSize if provided, otherwise auto-calculate from fontSize.
|
|
57
|
+
const opsz = opticalSize ?? getOpticalSize(fontSize);
|
|
58
|
+
|
|
47
59
|
// Use the provided color, or fall back to the theme's primary text color.
|
|
48
60
|
const iconColor = color ?? srgbToHex(tokens.textPrimary.srgb);
|
|
49
61
|
|
|
@@ -62,6 +74,9 @@ export function Icon({
|
|
|
62
74
|
return {
|
|
63
75
|
fontFamily,
|
|
64
76
|
fontSize,
|
|
77
|
+
width: fontSize, // Explicit width ensures square rendering
|
|
78
|
+
height: fontSize, // Explicit height ensures square rendering
|
|
79
|
+
lineHeight: fontSize, // Prevent text line-height from affecting total height
|
|
65
80
|
color: iconColor,
|
|
66
81
|
userSelect: 'none', // web-only: prevents users from selecting the icon as text
|
|
67
82
|
fontVariationSettings, // web-only: controls the variable font axes listed above
|
|
@@ -49,7 +49,7 @@ export interface WrapperProps {
|
|
|
49
49
|
* Child elements. Must be React Native elements (View, Text, etc.).
|
|
50
50
|
* Unlike Frame, raw strings are NOT auto-wrapped in `<Text>`.
|
|
51
51
|
*/
|
|
52
|
-
readonly children
|
|
52
|
+
readonly children?: React.ReactNode;
|
|
53
53
|
|
|
54
54
|
// ── Layout ──
|
|
55
55
|
|
package/src/registry/registry.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { CategoryMeta, ComponentMeta } from './types';
|
|
2
2
|
|
|
3
3
|
export const CATEGORIES: readonly CategoryMeta[] = [
|
|
4
|
+
{ id: 'primitives', name: 'Design Primitives', description: 'Core building blocks for theme-aware layouts and typography' },
|
|
4
5
|
{ id: 'actions', name: 'Actions', description: 'Interactive elements that trigger actions' },
|
|
5
6
|
{ id: 'form-controls', name: 'Form Controls', description: 'Input elements for user data entry' },
|
|
6
|
-
{ id: 'range-inputs', name: 'Range Inputs', description: 'Slider controls for numeric values' },
|
|
7
|
+
{ id: 'range-inputs', name: 'Range Inputs', description: 'Slider controls for numeric and continuous values' },
|
|
7
8
|
{ id: 'layout', name: 'Layout', description: 'Structural and container components' },
|
|
9
|
+
{ id: 'overlays', name: 'Overlays', description: 'Floating and portal-based UI elements' },
|
|
8
10
|
];
|
|
9
11
|
|
|
10
12
|
export const COMPONENTS: readonly ComponentMeta[] = [
|
|
@@ -387,6 +389,216 @@ export const COMPONENTS: readonly ComponentMeta[] = [
|
|
|
387
389
|
},
|
|
388
390
|
],
|
|
389
391
|
},
|
|
392
|
+
// ── Design Primitives ──
|
|
393
|
+
{
|
|
394
|
+
id: 'text',
|
|
395
|
+
name: 'Text',
|
|
396
|
+
importName: 'Text',
|
|
397
|
+
categoryId: 'primitives',
|
|
398
|
+
description: 'Typography primitive with semantic size, weight, color, font, and lineHeight',
|
|
399
|
+
hasChildren: true,
|
|
400
|
+
variants: [
|
|
401
|
+
{ id: 'default', label: 'Default', props: {} },
|
|
402
|
+
{ id: 'heading', label: 'Heading', props: { size: 'xl', weight: 'bold' } },
|
|
403
|
+
{ id: 'subheading', label: 'Subheading', props: { size: 'lg', weight: 'semibold' } },
|
|
404
|
+
{ id: 'body', label: 'Body', props: { size: 'base' } },
|
|
405
|
+
{ id: 'caption', label: 'Caption', props: { size: 'sm', color: 'secondary' } },
|
|
406
|
+
{ id: 'link', label: 'Link', props: { color: 'interactive', weight: 'medium' } },
|
|
407
|
+
{ id: 'mono', label: 'Monospace', props: { font: 'mono', size: 'sm' } },
|
|
408
|
+
],
|
|
409
|
+
editableProps: [
|
|
410
|
+
{
|
|
411
|
+
name: 'size',
|
|
412
|
+
label: 'Size',
|
|
413
|
+
control: 'select',
|
|
414
|
+
options: [
|
|
415
|
+
{ label: 'Extra Small', value: 'xs' },
|
|
416
|
+
{ label: 'Small', value: 'sm' },
|
|
417
|
+
{ label: 'Base', value: 'base' },
|
|
418
|
+
{ label: 'Medium', value: 'md' },
|
|
419
|
+
{ label: 'Large', value: 'lg' },
|
|
420
|
+
{ label: 'Extra Large', value: 'xl' },
|
|
421
|
+
{ label: 'XXL', value: 'xxl' },
|
|
422
|
+
],
|
|
423
|
+
defaultValue: 'base',
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
name: 'weight',
|
|
427
|
+
label: 'Weight',
|
|
428
|
+
control: 'select',
|
|
429
|
+
options: [
|
|
430
|
+
{ label: 'Regular', value: 'regular' },
|
|
431
|
+
{ label: 'Medium', value: 'medium' },
|
|
432
|
+
{ label: 'Semibold', value: 'semibold' },
|
|
433
|
+
{ label: 'Bold', value: 'bold' },
|
|
434
|
+
],
|
|
435
|
+
defaultValue: 'regular',
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
name: 'color',
|
|
439
|
+
label: 'Color',
|
|
440
|
+
control: 'select',
|
|
441
|
+
options: [
|
|
442
|
+
{ label: 'Primary', value: 'primary' },
|
|
443
|
+
{ label: 'Secondary', value: 'secondary' },
|
|
444
|
+
{ label: 'Interactive', value: 'interactive' },
|
|
445
|
+
],
|
|
446
|
+
defaultValue: 'primary',
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
name: 'font',
|
|
450
|
+
label: 'Font',
|
|
451
|
+
control: 'select',
|
|
452
|
+
options: [
|
|
453
|
+
{ label: 'Default', value: 'default' },
|
|
454
|
+
{ label: 'Display', value: 'display' },
|
|
455
|
+
{ label: 'Mono', value: 'mono' },
|
|
456
|
+
],
|
|
457
|
+
defaultValue: 'default',
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
id: 'icon',
|
|
463
|
+
name: 'Icon',
|
|
464
|
+
importName: 'Icon',
|
|
465
|
+
categoryId: 'primitives',
|
|
466
|
+
description: 'Material Symbols icon with size, fill, and color',
|
|
467
|
+
hasChildren: false,
|
|
468
|
+
variants: [
|
|
469
|
+
{ id: 'home', label: 'Home', props: { name: 'home' } },
|
|
470
|
+
{ id: 'settings', label: 'Settings', props: { name: 'settings' } },
|
|
471
|
+
{ id: 'check', label: 'Check', props: { name: 'check' } },
|
|
472
|
+
{ id: 'add', label: 'Add', props: { name: 'add' } },
|
|
473
|
+
{ id: 'delete', label: 'Delete', props: { name: 'delete' } },
|
|
474
|
+
{ id: 'search', label: 'Search', props: { name: 'search' } },
|
|
475
|
+
{ id: 'filled', label: 'Filled Icon', props: { name: 'favorite', fill: 1 } },
|
|
476
|
+
{ id: 'large', label: 'Large Icon', props: { name: 'star', size: 32 } },
|
|
477
|
+
],
|
|
478
|
+
editableProps: [
|
|
479
|
+
{
|
|
480
|
+
name: 'name',
|
|
481
|
+
label: 'Icon Name',
|
|
482
|
+
control: 'text',
|
|
483
|
+
defaultValue: 'home',
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
name: 'size',
|
|
487
|
+
label: 'Size',
|
|
488
|
+
control: 'number',
|
|
489
|
+
defaultValue: 24,
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
name: 'fill',
|
|
493
|
+
label: 'Fill',
|
|
494
|
+
control: 'select',
|
|
495
|
+
options: [
|
|
496
|
+
{ label: 'Outlined', value: 0 },
|
|
497
|
+
{ label: 'Filled', value: 1 },
|
|
498
|
+
],
|
|
499
|
+
defaultValue: 0,
|
|
500
|
+
},
|
|
501
|
+
],
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
id: 'wrapper',
|
|
505
|
+
name: 'Wrapper',
|
|
506
|
+
importName: 'Wrapper',
|
|
507
|
+
categoryId: 'primitives',
|
|
508
|
+
description: 'Lightweight layout container with direction, spacing, and alignment (no theming)',
|
|
509
|
+
hasChildren: true,
|
|
510
|
+
variants: [
|
|
511
|
+
{ id: 'vertical', label: 'Vertical Stack', props: { direction: 'vertical', gap: 'md' } },
|
|
512
|
+
{ id: 'horizontal', label: 'Horizontal Row', props: { direction: 'horizontal', gap: 'md', align: 'center' } },
|
|
513
|
+
{ id: 'padded', label: 'Padded', props: { padding: 'lg', gap: 'md' } },
|
|
514
|
+
{ id: 'centered', label: 'Centered', props: { align: 'center', justify: 'center', padding: 'xl' } },
|
|
515
|
+
],
|
|
516
|
+
editableProps: [
|
|
517
|
+
{
|
|
518
|
+
name: 'direction',
|
|
519
|
+
label: 'Direction',
|
|
520
|
+
control: 'select',
|
|
521
|
+
options: [
|
|
522
|
+
{ label: 'Vertical', value: 'vertical' },
|
|
523
|
+
{ label: 'Horizontal', value: 'horizontal' },
|
|
524
|
+
],
|
|
525
|
+
defaultValue: 'vertical',
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
name: 'gap',
|
|
529
|
+
label: 'Gap',
|
|
530
|
+
control: 'select',
|
|
531
|
+
options: [
|
|
532
|
+
{ label: 'None', value: '' },
|
|
533
|
+
{ label: 'Small', value: 'sm' },
|
|
534
|
+
{ label: 'Medium', value: 'md' },
|
|
535
|
+
{ label: 'Large', value: 'lg' },
|
|
536
|
+
],
|
|
537
|
+
defaultValue: '',
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: 'padding',
|
|
541
|
+
label: 'Padding',
|
|
542
|
+
control: 'select',
|
|
543
|
+
options: [
|
|
544
|
+
{ label: 'None', value: '' },
|
|
545
|
+
{ label: 'Small', value: 'sm' },
|
|
546
|
+
{ label: 'Medium', value: 'md' },
|
|
547
|
+
{ label: 'Large', value: 'lg' },
|
|
548
|
+
],
|
|
549
|
+
defaultValue: '',
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
name: 'align',
|
|
553
|
+
label: 'Align',
|
|
554
|
+
control: 'select',
|
|
555
|
+
options: [
|
|
556
|
+
{ label: 'Start', value: 'start' },
|
|
557
|
+
{ label: 'Center', value: 'center' },
|
|
558
|
+
{ label: 'End', value: 'end' },
|
|
559
|
+
],
|
|
560
|
+
defaultValue: 'start',
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: 'justify',
|
|
564
|
+
label: 'Justify',
|
|
565
|
+
control: 'select',
|
|
566
|
+
options: [
|
|
567
|
+
{ label: 'Start', value: 'start' },
|
|
568
|
+
{ label: 'Center', value: 'center' },
|
|
569
|
+
{ label: 'End', value: 'end' },
|
|
570
|
+
{ label: 'Space Between', value: 'space-between' },
|
|
571
|
+
],
|
|
572
|
+
defaultValue: 'start',
|
|
573
|
+
},
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
// ── Range Inputs (Addition: ColorScaleSlider) ──
|
|
577
|
+
{
|
|
578
|
+
id: 'color-scale-slider',
|
|
579
|
+
name: 'ColorScaleSlider',
|
|
580
|
+
importName: 'ColorScaleSlider',
|
|
581
|
+
categoryId: 'range-inputs',
|
|
582
|
+
description: 'Interactive palette preview slider with color segments',
|
|
583
|
+
hasChildren: false,
|
|
584
|
+
variants: [
|
|
585
|
+
{ id: 'default', label: 'Default', props: { label: 'Key Color' } },
|
|
586
|
+
],
|
|
587
|
+
editableProps: [
|
|
588
|
+
{
|
|
589
|
+
name: 'label',
|
|
590
|
+
label: 'Label',
|
|
591
|
+
control: 'text',
|
|
592
|
+
defaultValue: 'Key Color',
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'disabled',
|
|
596
|
+
label: 'Disabled',
|
|
597
|
+
control: 'toggle',
|
|
598
|
+
defaultValue: false,
|
|
599
|
+
},
|
|
600
|
+
],
|
|
601
|
+
},
|
|
390
602
|
];
|
|
391
603
|
|
|
392
604
|
export function getComponent(id: string): ComponentMeta | undefined {
|
|
@@ -114,6 +114,21 @@ export function computeTokens(
|
|
|
114
114
|
palette.paletteHueGrading
|
|
115
115
|
);
|
|
116
116
|
|
|
117
|
+
// Compute interactive component background (FIXED -0.035 NV offset from current elevation)
|
|
118
|
+
// Unlike backgroundElevated/backgroundSunken which use discrete levels, this uses a fixed
|
|
119
|
+
// luminosity offset to ensure CONSISTENT visual contrast across all elevations (-2 to 2).
|
|
120
|
+
// Used by: Button (neutral primary variant) and future components with neutral filled backgrounds.
|
|
121
|
+
const INTERACTIVE_COMPONENT_OFFSET = -0.035; // Slightly darker than container for depth
|
|
122
|
+
const interactiveComponentNv = Math.max(0, Math.min(1, backgroundNv + INTERACTIVE_COMPONENT_OFFSET));
|
|
123
|
+
const backgroundInteractive = getColor(
|
|
124
|
+
palette.hue,
|
|
125
|
+
palette.saturation,
|
|
126
|
+
dynamicRange,
|
|
127
|
+
interactiveComponentNv,
|
|
128
|
+
palette.desaturation,
|
|
129
|
+
palette.paletteHueGrading
|
|
130
|
+
);
|
|
131
|
+
|
|
117
132
|
// Compute text colors with WCAG contrast against actual background
|
|
118
133
|
// Primary text: WCAG AA (4.5:1 for body text)
|
|
119
134
|
const textPrimary = getColorByContrast(
|
|
@@ -242,6 +257,7 @@ export function computeTokens(
|
|
|
242
257
|
background,
|
|
243
258
|
backgroundElevated,
|
|
244
259
|
backgroundSunken,
|
|
260
|
+
backgroundInteractive,
|
|
245
261
|
textPrimary,
|
|
246
262
|
textSecondary,
|
|
247
263
|
interactive,
|
package/src/tokens/types.ts
CHANGED
|
@@ -10,6 +10,16 @@ export interface ResolvedTokens {
|
|
|
10
10
|
readonly backgroundElevated: ColorResult;
|
|
11
11
|
/** Background color for sunken surfaces (input fields, wells) */
|
|
12
12
|
readonly backgroundSunken: ColorResult;
|
|
13
|
+
/**
|
|
14
|
+
* Background color for interactive components with neutral backgrounds.
|
|
15
|
+
* Uses a fixed -0.035 NV (luminosity) offset from current background to ensure
|
|
16
|
+
* consistent visual contrast across all elevations (-2 to 2).
|
|
17
|
+
*
|
|
18
|
+
* Use for: Button (neutral primary), and future components with neutral filled backgrounds.
|
|
19
|
+
* Don't use for: Semantic variants (accent/success/error/warning), transparent backgrounds,
|
|
20
|
+
* or primitives (Frame/Wrapper/Text/Icon already handle elevation correctly).
|
|
21
|
+
*/
|
|
22
|
+
readonly backgroundInteractive: ColorResult;
|
|
13
23
|
/** Primary text color (high contrast for body text) */
|
|
14
24
|
readonly textPrimary: ColorResult;
|
|
15
25
|
/** Secondary text color (lower contrast for captions, labels) */
|