@thewhileloop/whileui 3.0.0 → 4.1.0
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/README.md +244 -80
- package/dist/blocks/chat/chat-conversation.d.ts +8 -0
- package/dist/blocks/chat/chat-conversation.js +36 -0
- package/dist/blocks/chat/chat.js +5 -11
- package/dist/blocks/chat/index.d.ts +1 -0
- package/dist/blocks/chat/index.js +1 -0
- package/dist/blocks/datepicker/index.d.ts +1 -0
- package/dist/blocks/datepicker/index.js +1 -0
- package/dist/blocks/datepicker/time-picker-modal.d.ts +43 -0
- package/dist/blocks/datepicker/time-picker-modal.js +187 -0
- package/dist/blocks/layout/smart-input.js +2 -1
- package/dist/code.d.ts +1 -0
- package/dist/code.js +1 -0
- package/dist/components/card/card.d.ts +1 -1
- package/dist/components/card/card.js +4 -25
- package/dist/components/code-block/code-block.d.ts +12 -0
- package/dist/components/code-block/code-block.js +13 -0
- package/dist/components/code-block/index.d.ts +1 -0
- package/dist/components/code-block/index.js +1 -0
- package/dist/components/fab/fab.d.ts +87 -0
- package/dist/components/fab/fab.js +59 -0
- package/dist/components/fab/index.d.ts +1 -0
- package/dist/components/fab/index.js +1 -0
- package/dist/components/form-field/form-field.d.ts +8 -0
- package/dist/components/form-field/form-field.js +3 -0
- package/dist/components/form-field/index.d.ts +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/input/input.d.ts +7 -0
- package/dist/components/input/input.js +26 -9
- package/dist/components/markdown/index.d.ts +1 -0
- package/dist/components/markdown/index.js +1 -0
- package/dist/components/markdown/markdown.d.ts +14 -0
- package/dist/components/markdown/markdown.js +94 -0
- package/dist/components/numeric-input/numeric-input.d.ts +1 -0
- package/dist/components/numeric-input/numeric-input.js +19 -6
- package/dist/components/select/select.d.ts +2 -1
- package/dist/components/select/select.js +18 -15
- package/dist/components/surface/index.d.ts +1 -0
- package/dist/components/surface/index.js +1 -0
- package/dist/components/surface/surface.d.ts +14 -0
- package/dist/components/surface/surface.js +35 -0
- package/dist/components/text/text.d.ts +42 -42
- package/dist/components/text/text.js +39 -17
- package/dist/components/textarea/textarea.d.ts +1 -0
- package/dist/components/textarea/textarea.js +8 -4
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/lib/focus-ring.d.ts +10 -0
- package/dist/lib/focus-ring.js +10 -0
- package/dist/lib/interaction-tokens.d.ts +24 -1
- package/dist/lib/interaction-tokens.js +26 -44
- package/dist/lib/motion-policy.js +2 -2
- package/dist/lib/theme-presets.d.ts +26 -0
- package/dist/lib/theme-presets.js +28 -0
- package/dist/lib/web-autofill.d.ts +9 -0
- package/dist/lib/web-autofill.js +9 -0
- package/dist/markdown.d.ts +1 -0
- package/dist/markdown.js +1 -0
- package/package.json +16 -2
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { PortalHost } from './lib/portal';
|
|
|
7
7
|
export { ThemeBridge, applyThemeMode, resolveThemeMode, syncThemeMode, useThemeBridge, } from './lib/theme-bridge';
|
|
8
8
|
export { useThemeColors, useThemeTokens, useIconColors, } from './lib/theme-colors';
|
|
9
9
|
export { THEME_TOKEN_SPECS, THEME_TOKEN_GROUPS, WHILEUI_LIGHT_THEME_COLORS, WHILEUI_DARK_THEME_COLORS, } from './lib/theme-contract';
|
|
10
|
-
export { useInteractionTokens, withInteractivePressableStyle, } from './lib/interaction-tokens';
|
|
10
|
+
export { INTERACTION_TOKENS, useInteractionTokens, withInteractivePressableStyle, } from './lib/interaction-tokens';
|
|
11
11
|
export { MotionProvider, useMotionPolicy, } from './lib/motion-policy';
|
|
12
12
|
export { useVisualTokens } from './lib/visual-tokens';
|
|
13
13
|
export { VISUAL_TOKEN_SPECS, VISUAL_TOKEN_GROUPS, } from './lib/visual-token-contract';
|
|
@@ -16,6 +16,7 @@ export { controlRecipe, fieldRecipe, surfaceRecipe, surfacePadding, surfaceRadiu
|
|
|
16
16
|
export { WHILEUI_PRESET_SOFT, WHILEUI_PRESET_ATELIER, WHILEUI_THEME_PRESETS, themePresetToCssVariables, themePresetToCss, } from './lib/theme-presets';
|
|
17
17
|
export { deriveThemeColors, THEME_BASE_TOKEN_KEYS } from './lib/theme-derive';
|
|
18
18
|
export { Text, textVariants } from './components/text';
|
|
19
|
+
export { Surface } from './components/surface';
|
|
19
20
|
export { View } from './components/view';
|
|
20
21
|
export { Pressable } from './components/pressable';
|
|
21
22
|
export { Stack, stackVariants } from './components/stack';
|
|
@@ -25,9 +26,10 @@ export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter,
|
|
|
25
26
|
export { Input, inputVariants } from './components/input';
|
|
26
27
|
export { NumericInput, numericInputVariants, numericInputTextVariants, } from './components/numeric-input';
|
|
27
28
|
export { OTPInput, otpCellVariants } from './components/otp-input';
|
|
28
|
-
export { FormField, FormLabel, FormControl, FormHint, FormMessage, formFieldVariants, formControlVariants, } from './components/form-field';
|
|
29
|
+
export { FormField, FormLabel, FormControl, FormHint, FormMessage, useFormFieldState, formFieldVariants, formControlVariants, } from './components/form-field';
|
|
29
30
|
export { LabeledField, LabeledFieldControl, } from './components/labeled-field';
|
|
30
31
|
export { Badge, BadgeText, badgeVariants, badgeTextVariants, } from './components/badge';
|
|
32
|
+
export { FAB, FABGroup, fabVariants } from './components/fab';
|
|
31
33
|
export { Alert, AlertTitle, AlertDescription, alertVariants, } from './components/alert';
|
|
32
34
|
export { Switch } from './components/switch';
|
|
33
35
|
export { Checkbox } from './components/checkbox';
|
package/dist/lib/focus-ring.d.ts
CHANGED
|
@@ -23,3 +23,13 @@ export declare const focusRing = "web:outline-none web:focus-visible:ring-2 web:
|
|
|
23
23
|
* would be clipped by the parent or collide with a neighbour.
|
|
24
24
|
*/
|
|
25
25
|
export declare const focusRingInset = "web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring";
|
|
26
|
+
/**
|
|
27
|
+
* For text fields. Browsers treat every focus on a text field as keyboard focus, so a
|
|
28
|
+
* `:focus-visible` ring fires on a tap too — and an offset ring around a rounded field
|
|
29
|
+
* reads as a second, squarer border. A field shows focus the way the platforms do:
|
|
30
|
+
* its own border takes the ring colour. The class carries the colour; a field whose
|
|
31
|
+
* border lives on a wrapper (`Input`, `NumericInput`) applies it there from focus state.
|
|
32
|
+
*/
|
|
33
|
+
export declare const focusField = "web:outline-none web:focus-visible:border-ring";
|
|
34
|
+
/** The wrapper half of `focusField`: the border colour while the inner field has focus. */
|
|
35
|
+
export declare const focusFieldWrapper = "border-ring";
|
package/dist/lib/focus-ring.js
CHANGED
|
@@ -23,3 +23,13 @@ export const focusRing = 'web:outline-none web:focus-visible:ring-2 web:focus-vi
|
|
|
23
23
|
* would be clipped by the parent or collide with a neighbour.
|
|
24
24
|
*/
|
|
25
25
|
export const focusRingInset = 'web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring';
|
|
26
|
+
/**
|
|
27
|
+
* For text fields. Browsers treat every focus on a text field as keyboard focus, so a
|
|
28
|
+
* `:focus-visible` ring fires on a tap too — and an offset ring around a rounded field
|
|
29
|
+
* reads as a second, squarer border. A field shows focus the way the platforms do:
|
|
30
|
+
* its own border takes the ring colour. The class carries the colour; a field whose
|
|
31
|
+
* border lives on a wrapper (`Input`, `NumericInput`) applies it there from focus state.
|
|
32
|
+
*/
|
|
33
|
+
export const focusField = 'web:outline-none web:focus-visible:border-ring';
|
|
34
|
+
/** The wrapper half of `focusField`: the border colour while the inner field has focus. */
|
|
35
|
+
export const focusFieldWrapper = 'border-ring';
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
import { type PressableProps } from 'react-native';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Press, disabled, and motion timing for the whole package.
|
|
4
|
+
*
|
|
5
|
+
* These are not theme tokens. A generated preset does not emit them, and reading the
|
|
6
|
+
* matching `--ui-*` variables warned in every app on that preset while resolving to
|
|
7
|
+
* these same numbers. One table, no CSS lookup.
|
|
8
|
+
*/
|
|
9
|
+
export declare const INTERACTION_TOKENS: {
|
|
10
|
+
readonly pressOpacity: 0.82;
|
|
11
|
+
readonly pressOpacityStrong: 0.92;
|
|
12
|
+
readonly disabledOpacity: 0.46;
|
|
13
|
+
readonly disabledOpacitySoft: 0.56;
|
|
14
|
+
readonly disabledOpacitySubtle: 0.36;
|
|
15
|
+
readonly inactiveOpacity: 0.54;
|
|
16
|
+
readonly motionFast: 140;
|
|
17
|
+
readonly motionNormal: 200;
|
|
18
|
+
readonly motionSlow: 280;
|
|
19
|
+
readonly motionSpringDamping: 20;
|
|
20
|
+
readonly motionSpringStiffness: 260;
|
|
21
|
+
readonly motionSpringMass: 0.8;
|
|
22
|
+
readonly drawerOpenDuration: 260;
|
|
23
|
+
readonly drawerCloseDuration: 180;
|
|
24
|
+
};
|
|
25
|
+
/** Motion slice of {@link INTERACTION_TOKENS}, for the provider-less policy. */
|
|
3
26
|
export declare const MOTION_TOKEN_DEFAULTS: {
|
|
4
27
|
readonly motionFast: 140;
|
|
5
28
|
readonly motionNormal: 200;
|
|
@@ -1,55 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Press, disabled, and motion timing for the whole package.
|
|
3
|
+
*
|
|
4
|
+
* These are not theme tokens. A generated preset does not emit them, and reading the
|
|
5
|
+
* matching `--ui-*` variables warned in every app on that preset while resolving to
|
|
6
|
+
* these same numbers. One table, no CSS lookup.
|
|
7
|
+
*/
|
|
8
|
+
export const INTERACTION_TOKENS = {
|
|
9
|
+
pressOpacity: 0.82,
|
|
10
|
+
pressOpacityStrong: 0.92,
|
|
11
|
+
disabledOpacity: 0.46,
|
|
12
|
+
disabledOpacitySoft: 0.56,
|
|
13
|
+
disabledOpacitySubtle: 0.36,
|
|
14
|
+
inactiveOpacity: 0.54,
|
|
13
15
|
motionFast: 140,
|
|
14
16
|
motionNormal: 200,
|
|
15
17
|
motionSlow: 280,
|
|
16
18
|
motionSpringDamping: 20,
|
|
17
19
|
motionSpringStiffness: 260,
|
|
18
20
|
motionSpringMass: 0.8,
|
|
21
|
+
drawerOpenDuration: 260,
|
|
22
|
+
drawerCloseDuration: 180,
|
|
23
|
+
};
|
|
24
|
+
/** Motion slice of {@link INTERACTION_TOKENS}, for the provider-less policy. */
|
|
25
|
+
export const MOTION_TOKEN_DEFAULTS = {
|
|
26
|
+
motionFast: INTERACTION_TOKENS.motionFast,
|
|
27
|
+
motionNormal: INTERACTION_TOKENS.motionNormal,
|
|
28
|
+
motionSlow: INTERACTION_TOKENS.motionSlow,
|
|
29
|
+
motionSpringDamping: INTERACTION_TOKENS.motionSpringDamping,
|
|
30
|
+
motionSpringStiffness: INTERACTION_TOKENS.motionSpringStiffness,
|
|
31
|
+
motionSpringMass: INTERACTION_TOKENS.motionSpringMass,
|
|
19
32
|
};
|
|
20
33
|
export function useInteractionTokens() {
|
|
21
|
-
|
|
22
|
-
'--ui-press-opacity',
|
|
23
|
-
'--ui-press-opacity-strong',
|
|
24
|
-
'--ui-disabled-opacity',
|
|
25
|
-
'--ui-disabled-opacity-soft',
|
|
26
|
-
'--ui-disabled-opacity-subtle',
|
|
27
|
-
'--ui-inactive-opacity',
|
|
28
|
-
'--ui-motion-fast',
|
|
29
|
-
'--ui-motion-normal',
|
|
30
|
-
'--ui-motion-slow',
|
|
31
|
-
'--ui-motion-spring-damping',
|
|
32
|
-
'--ui-motion-spring-stiffness',
|
|
33
|
-
'--ui-motion-spring-mass',
|
|
34
|
-
'--ui-drawer-open-duration',
|
|
35
|
-
'--ui-drawer-close-duration',
|
|
36
|
-
]);
|
|
37
|
-
return {
|
|
38
|
-
pressOpacity: clampOpacity(parseNumber(pressOpacity, 0.82)),
|
|
39
|
-
pressOpacityStrong: clampOpacity(parseNumber(pressOpacityStrong, 0.92)),
|
|
40
|
-
disabledOpacity: clampOpacity(parseNumber(disabledOpacity, 0.46)),
|
|
41
|
-
disabledOpacitySoft: clampOpacity(parseNumber(disabledOpacitySoft, 0.56)),
|
|
42
|
-
disabledOpacitySubtle: clampOpacity(parseNumber(disabledOpacitySubtle, 0.36)),
|
|
43
|
-
inactiveOpacity: clampOpacity(parseNumber(inactiveOpacity, 0.54)),
|
|
44
|
-
motionFast: Math.max(0, Math.round(parseNumber(motionFast, MOTION_TOKEN_DEFAULTS.motionFast))),
|
|
45
|
-
motionNormal: Math.max(0, Math.round(parseNumber(motionNormal, MOTION_TOKEN_DEFAULTS.motionNormal))),
|
|
46
|
-
motionSlow: Math.max(0, Math.round(parseNumber(motionSlow, MOTION_TOKEN_DEFAULTS.motionSlow))),
|
|
47
|
-
motionSpringDamping: Math.max(0, parseNumber(motionSpringDamping, MOTION_TOKEN_DEFAULTS.motionSpringDamping)),
|
|
48
|
-
motionSpringStiffness: Math.max(0, parseNumber(motionSpringStiffness, MOTION_TOKEN_DEFAULTS.motionSpringStiffness)),
|
|
49
|
-
motionSpringMass: Math.max(0.01, parseNumber(motionSpringMass, MOTION_TOKEN_DEFAULTS.motionSpringMass)),
|
|
50
|
-
drawerOpenDuration: Math.max(0, Math.round(parseNumber(drawerOpenDuration, 260))),
|
|
51
|
-
drawerCloseDuration: Math.max(0, Math.round(parseNumber(drawerCloseDuration, 180))),
|
|
52
|
-
};
|
|
34
|
+
return INTERACTION_TOKENS;
|
|
53
35
|
}
|
|
54
36
|
function resolveDisabledOpacity(tokens, variant) {
|
|
55
37
|
if (variant === 'none')
|
|
@@ -4,8 +4,8 @@ import { AccessibilityInfo } from 'react-native';
|
|
|
4
4
|
import { ReduceMotion, useReducedMotion } from 'react-native-reanimated';
|
|
5
5
|
import { MOTION_TOKEN_DEFAULTS, useInteractionTokens } from './interaction-tokens';
|
|
6
6
|
// Without a provider, components still render and Reanimated still follows the system
|
|
7
|
-
// setting.
|
|
8
|
-
//
|
|
7
|
+
// setting. The provider is what switches the non-Reanimated paths to reduced or
|
|
8
|
+
// disabled motion. Durations and the spring come from `INTERACTION_TOKENS` either way.
|
|
9
9
|
const DEFAULT_MOTION_POLICY = {
|
|
10
10
|
mode: 'system',
|
|
11
11
|
reduceMotion: false,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ThemeColors } from './theme-contract';
|
|
2
|
+
import { type ThemeBaseColors } from './theme-derive';
|
|
2
3
|
import { type VisualTokens } from './visual-token-contract';
|
|
3
4
|
/**
|
|
4
5
|
* Canonical full-package theme presets.
|
|
@@ -15,6 +16,31 @@ export interface ThemePreset {
|
|
|
15
16
|
/** Visual token overrides; unset keys keep contract fallbacks. */
|
|
16
17
|
visual: Partial<VisualTokens>;
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a preset from the 25 base colors, deriving the other 27.
|
|
21
|
+
*
|
|
22
|
+
* Prefer this to writing a `ThemePreset` literal. `visual` has always been
|
|
23
|
+
* `Partial`, but `light` and `dark` are the full 52-key `ThemeColors`, so the
|
|
24
|
+
* literal form asks an author for every active variant, soft variant, overlay,
|
|
25
|
+
* surface, interaction state and shadow — values `deriveThemeColors` already
|
|
26
|
+
* computes from the palette. Nothing in the literal's type points at that helper,
|
|
27
|
+
* and the predictable result is a hand-written derivation that drifts from the
|
|
28
|
+
* library's own. The Atelier preset below is 110 lines for this reason.
|
|
29
|
+
*
|
|
30
|
+
* Override a derived value by spreading the result:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* const preset = createThemePreset({ name, description, light, dark });
|
|
34
|
+
* preset.dark.overlay = 'rgba(0, 0, 0, 0.9)';
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function createThemePreset(input: {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
light: ThemeBaseColors;
|
|
41
|
+
dark: ThemeBaseColors;
|
|
42
|
+
visual?: Partial<VisualTokens>;
|
|
43
|
+
}): ThemePreset;
|
|
18
44
|
export declare const WHILEUI_PRESET_SOFT: ThemePreset;
|
|
19
45
|
export declare const WHILEUI_PRESET_ATELIER: ThemePreset;
|
|
20
46
|
export declare const WHILEUI_THEME_PRESETS: readonly ThemePreset[];
|
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import { THEME_TOKEN_SPECS, WHILEUI_DARK_THEME_COLORS, WHILEUI_LIGHT_THEME_COLORS, } from './theme-contract';
|
|
2
|
+
import { deriveThemeColors } from './theme-derive';
|
|
2
3
|
import { VISUAL_TOKEN_SPECS } from './visual-token-contract';
|
|
4
|
+
/**
|
|
5
|
+
* Build a preset from the 25 base colors, deriving the other 27.
|
|
6
|
+
*
|
|
7
|
+
* Prefer this to writing a `ThemePreset` literal. `visual` has always been
|
|
8
|
+
* `Partial`, but `light` and `dark` are the full 52-key `ThemeColors`, so the
|
|
9
|
+
* literal form asks an author for every active variant, soft variant, overlay,
|
|
10
|
+
* surface, interaction state and shadow — values `deriveThemeColors` already
|
|
11
|
+
* computes from the palette. Nothing in the literal's type points at that helper,
|
|
12
|
+
* and the predictable result is a hand-written derivation that drifts from the
|
|
13
|
+
* library's own. The Atelier preset below is 110 lines for this reason.
|
|
14
|
+
*
|
|
15
|
+
* Override a derived value by spreading the result:
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* const preset = createThemePreset({ name, description, light, dark });
|
|
19
|
+
* preset.dark.overlay = 'rgba(0, 0, 0, 0.9)';
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function createThemePreset(input) {
|
|
23
|
+
return {
|
|
24
|
+
name: input.name,
|
|
25
|
+
description: input.description,
|
|
26
|
+
light: deriveThemeColors(input.light, 'light'),
|
|
27
|
+
dark: deriveThemeColors(input.dark, 'dark'),
|
|
28
|
+
visual: input.visual ?? {},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
3
31
|
// Rounded, airy, frosted. Matches the contract fallbacks.
|
|
4
32
|
export const WHILEUI_PRESET_SOFT = {
|
|
5
33
|
name: 'soft',
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser autofill paints its own field background and text colours. The large inset
|
|
3
|
+
* shadow covers that paint without changing the native style contract; the other two
|
|
4
|
+
* declarations restore the active theme's text and caret.
|
|
5
|
+
*
|
|
6
|
+
* Apply only to fields whose own surface is `bg-muted`. Transparent/unstyled inputs
|
|
7
|
+
* must keep inheriting the surface chosen by their composition.
|
|
8
|
+
*/
|
|
9
|
+
export declare const webAutofillField = "web:autofill:shadow-[inset_0_0_0_1000px_var(--color-muted)] web:autofill:[-webkit-text-fill-color:var(--color-foreground)] web:autofill:caret-foreground";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser autofill paints its own field background and text colours. The large inset
|
|
3
|
+
* shadow covers that paint without changing the native style contract; the other two
|
|
4
|
+
* declarations restore the active theme's text and caret.
|
|
5
|
+
*
|
|
6
|
+
* Apply only to fields whose own surface is `bg-muted`. Transparent/unstyled inputs
|
|
7
|
+
* must keep inheriting the surface chosen by their composition.
|
|
8
|
+
*/
|
|
9
|
+
export const webAutofillField = 'web:autofill:shadow-[inset_0_0_0_1000px_var(--color-muted)] web:autofill:[-webkit-text-fill-color:var(--color-foreground)] web:autofill:caret-foreground';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Markdown, type MarkdownProps } from './components/markdown';
|
package/dist/markdown.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Markdown } from './components/markdown';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thewhileloop/whileui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "WhileUI Native — Copy-paste components for React Native. You own the code.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -40,6 +40,14 @@
|
|
|
40
40
|
"types": "./dist/tokens.d.ts",
|
|
41
41
|
"import": "./dist/tokens.js"
|
|
42
42
|
},
|
|
43
|
+
"./code": {
|
|
44
|
+
"types": "./dist/code.d.ts",
|
|
45
|
+
"import": "./dist/code.js"
|
|
46
|
+
},
|
|
47
|
+
"./markdown": {
|
|
48
|
+
"types": "./dist/markdown.d.ts",
|
|
49
|
+
"import": "./dist/markdown.js"
|
|
50
|
+
},
|
|
43
51
|
"./package.json": "./package.json"
|
|
44
52
|
},
|
|
45
53
|
"files": [
|
|
@@ -78,11 +86,15 @@
|
|
|
78
86
|
"react-native-screens": ">=4.30.0",
|
|
79
87
|
"tailwindcss": ">=4.0.0",
|
|
80
88
|
"uniwind": ">=1.12.0",
|
|
81
|
-
"react-native-worklets": ">=0.13.0"
|
|
89
|
+
"react-native-worklets": ">=0.13.0",
|
|
90
|
+
"markdown-it": ">=14.1.0"
|
|
82
91
|
},
|
|
83
92
|
"peerDependenciesMeta": {
|
|
84
93
|
"expo-blur": {
|
|
85
94
|
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"markdown-it": {
|
|
97
|
+
"optional": true
|
|
86
98
|
}
|
|
87
99
|
},
|
|
88
100
|
"dependencies": {
|
|
@@ -97,10 +109,12 @@
|
|
|
97
109
|
"@testing-library/react-native": "^14.1.0",
|
|
98
110
|
"@types/culori": "^4.0.1",
|
|
99
111
|
"@types/jest": "^30.0.0",
|
|
112
|
+
"@types/markdown-it": "^14.1.2",
|
|
100
113
|
"@types/react": "~19.3.0",
|
|
101
114
|
"expo-image": "~58.0.15",
|
|
102
115
|
"jest": "^30.5.2",
|
|
103
116
|
"jest-expo": "~58.0.11",
|
|
117
|
+
"markdown-it": "^14.1.0",
|
|
104
118
|
"react-native-screens": "~4.30.0",
|
|
105
119
|
"test-renderer": "^1.3.1",
|
|
106
120
|
"typescript": "~6.0.3"
|