@ttoss/ui 1.20.4 → 1.21.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.
@@ -0,0 +1,208 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+
3
+ // tsup.inject.js
4
+ import * as React from "react";
5
+
6
+ // src/index.ts
7
+ import { useResponsiveValue, useBreakpointIndex } from "@theme-ui/match-media";
8
+
9
+ // src/theme/ThemeProvider.tsx
10
+ import * as React2 from "react";
11
+ import { Global, css } from "@emotion/react";
12
+ import { ThemeProvider as ThemeUiProvider, merge } from "theme-ui";
13
+
14
+ // src/theme/defaultFonts.ts
15
+ var defaultFonts = [
16
+ "https://fonts.googleapis.com/css?family=Asap",
17
+ "https://fonts.googleapis.com/css?family=Overpass",
18
+ "https://fonts.googleapis.com/css?family=Overpass+Mono",
19
+ "https://fonts.googleapis.com/css?family=Flamenco"
20
+ ];
21
+
22
+ // src/theme/defaultTheme.ts
23
+ var defaultTheme = {
24
+ colors: {
25
+ text: "#000",
26
+ background: "#fff",
27
+ primary: "#07c",
28
+ secondary: "#639",
29
+ gray: "#555",
30
+ muted: "#f6f6f6",
31
+ danger: "red"
32
+ },
33
+ space: [0, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
34
+ fonts: {
35
+ body: '"Asap", sans-serif',
36
+ heading: '"Overpass", sans-serif',
37
+ monospace: '"Overpass Mono", sans-serif'
38
+ },
39
+ styles: {
40
+ root: {
41
+ fontFamily: "body",
42
+ fontWeight: "body"
43
+ },
44
+ a: {
45
+ color: "primary",
46
+ textDecoration: "underline",
47
+ cursor: "pointer",
48
+ fontFamily: "body"
49
+ },
50
+ progress: {
51
+ color: "primary",
52
+ backgroundColor: "background"
53
+ }
54
+ },
55
+ buttons: {
56
+ cta: {
57
+ color: "white",
58
+ backgroundColor: "primary"
59
+ },
60
+ muted: {
61
+ color: "text",
62
+ backgroundColor: "muted"
63
+ },
64
+ danger: {
65
+ color: "white",
66
+ backgroundColor: "danger"
67
+ }
68
+ },
69
+ cards: {
70
+ primary: {
71
+ backgroundColor: "background",
72
+ border: "1px solid black",
73
+ padding: [4, 5],
74
+ display: "flex",
75
+ flexDirection: "column",
76
+ alignItems: "center",
77
+ width: "fit-content"
78
+ }
79
+ },
80
+ forms: {
81
+ input: {
82
+ fontFamily: "body"
83
+ }
84
+ },
85
+ text: {
86
+ default: {
87
+ color: "text",
88
+ fontFamily: "body"
89
+ },
90
+ title: {
91
+ fontFamily: "heading",
92
+ fontSize: 4,
93
+ lineSpace: "3.5"
94
+ }
95
+ }
96
+ };
97
+
98
+ // src/theme/ThemeProvider.tsx
99
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
100
+ var ThemeProvider = ({
101
+ children,
102
+ theme = {},
103
+ fonts = defaultFonts
104
+ }) => {
105
+ const mergedTheme = React2.useMemo(() => {
106
+ if (typeof theme === "function") {
107
+ return theme;
108
+ }
109
+ return merge(defaultTheme, theme);
110
+ }, [theme]);
111
+ return /* @__PURE__ */ jsx(Fragment, {
112
+ children: /* @__PURE__ */ jsxs(ThemeUiProvider, {
113
+ theme: mergedTheme,
114
+ children: [
115
+ fonts.map((url) => /* @__PURE__ */ jsx(Global, {
116
+ styles: css`
117
+ @import url('${url}');
118
+ `
119
+ }, url)),
120
+ children
121
+ ]
122
+ })
123
+ });
124
+ };
125
+ var ThemeProvider_default = ThemeProvider;
126
+
127
+ // src/theme/useTheme.ts
128
+ import { useThemeUI } from "theme-ui";
129
+ var useTheme = useThemeUI;
130
+
131
+ // src/components/Box/Box.tsx
132
+ import { Box } from "theme-ui";
133
+
134
+ // src/components/Button/Button.tsx
135
+ import { Button as ButtonUi } from "theme-ui";
136
+ import { jsx as jsx2 } from "react/jsx-runtime";
137
+ var Button = (props) => {
138
+ return /* @__PURE__ */ jsx2(ButtonUi, {
139
+ ...props,
140
+ sx: { cursor: "pointer", fontFamily: "body", ...props.sx }
141
+ });
142
+ };
143
+
144
+ // src/components/Card/Card.tsx
145
+ import { Card } from "theme-ui";
146
+
147
+ // src/components/Divider/Divider.tsx
148
+ import { Divider } from "theme-ui";
149
+
150
+ // src/components/Flex/Flex.tsx
151
+ import { Flex } from "theme-ui";
152
+
153
+ // src/components/Grid/Grid.tsx
154
+ import { Grid } from "theme-ui";
155
+
156
+ // src/components/Heading/Heading.tsx
157
+ import { Heading } from "theme-ui";
158
+
159
+ // src/components/Image/Image.tsx
160
+ import { Image } from "theme-ui";
161
+
162
+ // src/components/Input/Input.tsx
163
+ import { Input } from "theme-ui";
164
+
165
+ // src/components/Label/Label.tsx
166
+ import { Label } from "theme-ui";
167
+
168
+ // src/components/Link/Link.tsx
169
+ import { Link } from "theme-ui";
170
+
171
+ // src/components/LinearProgress/LinearProgress.tsx
172
+ import {
173
+ Progress
174
+ } from "theme-ui";
175
+
176
+ // src/components/Text/Text.tsx
177
+ import { Text } from "theme-ui";
178
+
179
+ // src/components/Select/Select.tsx
180
+ import { Select } from "theme-ui";
181
+
182
+ // src/components/Spinner/Spinner.tsx
183
+ import { Spinner } from "theme-ui";
184
+
185
+ // src/components/Radio/Radio.tsx
186
+ import { Radio } from "theme-ui";
187
+ export {
188
+ Box,
189
+ Button,
190
+ Card,
191
+ Divider,
192
+ Flex,
193
+ Grid,
194
+ Heading,
195
+ Image,
196
+ Input,
197
+ Label,
198
+ Progress as LinearProgress,
199
+ Link,
200
+ Radio,
201
+ Select,
202
+ Spinner,
203
+ Text,
204
+ ThemeProvider_default as ThemeProvider,
205
+ useBreakpointIndex,
206
+ useResponsiveValue,
207
+ useTheme
208
+ };
@@ -0,0 +1,21 @@
1
+ import * as theme_ui from 'theme-ui';
2
+ import { Theme, ButtonProps } from 'theme-ui';
3
+ export { Box, BoxProps, ButtonProps, Card, CardProps, Divider, DividerProps, Flex, FlexProps, Grid, GridProps, Heading, HeadingProps, Image, ImageProps, Input, InputProps, Label, LabelProps, Progress as LinearProgress, ProgressProps as LinearProgressProps, Link, LinkProps, Radio, RadioProps, Select, SelectProps, Spinner, SpinnerProps, Text, TextProps, Theme } from 'theme-ui';
4
+ export { useBreakpointIndex, useResponsiveValue } from '@theme-ui/match-media';
5
+ import * as React from 'react';
6
+
7
+ declare type ThemeProviderProps = {
8
+ children?: React.ReactNode;
9
+ theme?: Theme;
10
+ /**
11
+ * Fonts URLs.
12
+ */
13
+ fonts?: string[];
14
+ };
15
+ declare const ThemeProvider: ({ children, theme, fonts, }: ThemeProviderProps) => JSX.Element;
16
+
17
+ declare const useTheme: () => theme_ui.ThemeUIContextValue;
18
+
19
+ declare const Button: (props: ButtonProps) => JSX.Element;
20
+
21
+ export { Button, ThemeProvider, ThemeProviderProps, useTheme };
package/dist/index.js ADDED
@@ -0,0 +1,257 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
+ mod
24
+ ));
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+
27
+ // src/index.ts
28
+ var src_exports = {};
29
+ __export(src_exports, {
30
+ Box: () => import_theme_ui3.Box,
31
+ Button: () => Button,
32
+ Card: () => import_theme_ui5.Card,
33
+ Divider: () => import_theme_ui6.Divider,
34
+ Flex: () => import_theme_ui7.Flex,
35
+ Grid: () => import_theme_ui8.Grid,
36
+ Heading: () => import_theme_ui9.Heading,
37
+ Image: () => import_theme_ui10.Image,
38
+ Input: () => import_theme_ui11.Input,
39
+ Label: () => import_theme_ui12.Label,
40
+ LinearProgress: () => import_theme_ui14.Progress,
41
+ Link: () => import_theme_ui13.Link,
42
+ Radio: () => import_theme_ui18.Radio,
43
+ Select: () => import_theme_ui16.Select,
44
+ Spinner: () => import_theme_ui17.Spinner,
45
+ Text: () => import_theme_ui15.Text,
46
+ ThemeProvider: () => ThemeProvider_default,
47
+ useBreakpointIndex: () => import_match_media.useBreakpointIndex,
48
+ useResponsiveValue: () => import_match_media.useResponsiveValue,
49
+ useTheme: () => useTheme
50
+ });
51
+ module.exports = __toCommonJS(src_exports);
52
+
53
+ // tsup.inject.js
54
+ var React = __toESM(require("react"));
55
+
56
+ // src/index.ts
57
+ var import_match_media = require("@theme-ui/match-media");
58
+
59
+ // src/theme/ThemeProvider.tsx
60
+ var React2 = __toESM(require("react"));
61
+ var import_react = require("@emotion/react");
62
+ var import_theme_ui = require("theme-ui");
63
+
64
+ // src/theme/defaultFonts.ts
65
+ var defaultFonts = [
66
+ "https://fonts.googleapis.com/css?family=Asap",
67
+ "https://fonts.googleapis.com/css?family=Overpass",
68
+ "https://fonts.googleapis.com/css?family=Overpass+Mono",
69
+ "https://fonts.googleapis.com/css?family=Flamenco"
70
+ ];
71
+
72
+ // src/theme/defaultTheme.ts
73
+ var defaultTheme = {
74
+ colors: {
75
+ text: "#000",
76
+ background: "#fff",
77
+ primary: "#07c",
78
+ secondary: "#639",
79
+ gray: "#555",
80
+ muted: "#f6f6f6",
81
+ danger: "red"
82
+ },
83
+ space: [0, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
84
+ fonts: {
85
+ body: '"Asap", sans-serif',
86
+ heading: '"Overpass", sans-serif',
87
+ monospace: '"Overpass Mono", sans-serif'
88
+ },
89
+ styles: {
90
+ root: {
91
+ fontFamily: "body",
92
+ fontWeight: "body"
93
+ },
94
+ a: {
95
+ color: "primary",
96
+ textDecoration: "underline",
97
+ cursor: "pointer",
98
+ fontFamily: "body"
99
+ },
100
+ progress: {
101
+ color: "primary",
102
+ backgroundColor: "background"
103
+ }
104
+ },
105
+ buttons: {
106
+ cta: {
107
+ color: "white",
108
+ backgroundColor: "primary"
109
+ },
110
+ muted: {
111
+ color: "text",
112
+ backgroundColor: "muted"
113
+ },
114
+ danger: {
115
+ color: "white",
116
+ backgroundColor: "danger"
117
+ }
118
+ },
119
+ cards: {
120
+ primary: {
121
+ backgroundColor: "background",
122
+ border: "1px solid black",
123
+ padding: [4, 5],
124
+ display: "flex",
125
+ flexDirection: "column",
126
+ alignItems: "center",
127
+ width: "fit-content"
128
+ }
129
+ },
130
+ forms: {
131
+ input: {
132
+ fontFamily: "body"
133
+ }
134
+ },
135
+ text: {
136
+ default: {
137
+ color: "text",
138
+ fontFamily: "body"
139
+ },
140
+ title: {
141
+ fontFamily: "heading",
142
+ fontSize: 4,
143
+ lineSpace: "3.5"
144
+ }
145
+ }
146
+ };
147
+
148
+ // src/theme/ThemeProvider.tsx
149
+ var import_jsx_runtime = require("react/jsx-runtime");
150
+ var ThemeProvider = ({
151
+ children,
152
+ theme = {},
153
+ fonts = defaultFonts
154
+ }) => {
155
+ const mergedTheme = React2.useMemo(() => {
156
+ if (typeof theme === "function") {
157
+ return theme;
158
+ }
159
+ return (0, import_theme_ui.merge)(defaultTheme, theme);
160
+ }, [theme]);
161
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
162
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_theme_ui.ThemeProvider, {
163
+ theme: mergedTheme,
164
+ children: [
165
+ fonts.map((url) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Global, {
166
+ styles: import_react.css`
167
+ @import url('${url}');
168
+ `
169
+ }, url)),
170
+ children
171
+ ]
172
+ })
173
+ });
174
+ };
175
+ var ThemeProvider_default = ThemeProvider;
176
+
177
+ // src/theme/useTheme.ts
178
+ var import_theme_ui2 = require("theme-ui");
179
+ var useTheme = import_theme_ui2.useThemeUI;
180
+
181
+ // src/components/Box/Box.tsx
182
+ var import_theme_ui3 = require("theme-ui");
183
+
184
+ // src/components/Button/Button.tsx
185
+ var import_theme_ui4 = require("theme-ui");
186
+ var import_jsx_runtime2 = require("react/jsx-runtime");
187
+ var Button = (props) => {
188
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_theme_ui4.Button, {
189
+ ...props,
190
+ sx: { cursor: "pointer", fontFamily: "body", ...props.sx }
191
+ });
192
+ };
193
+
194
+ // src/components/Card/Card.tsx
195
+ var import_theme_ui5 = require("theme-ui");
196
+
197
+ // src/components/Divider/Divider.tsx
198
+ var import_theme_ui6 = require("theme-ui");
199
+
200
+ // src/components/Flex/Flex.tsx
201
+ var import_theme_ui7 = require("theme-ui");
202
+
203
+ // src/components/Grid/Grid.tsx
204
+ var import_theme_ui8 = require("theme-ui");
205
+
206
+ // src/components/Heading/Heading.tsx
207
+ var import_theme_ui9 = require("theme-ui");
208
+
209
+ // src/components/Image/Image.tsx
210
+ var import_theme_ui10 = require("theme-ui");
211
+
212
+ // src/components/Input/Input.tsx
213
+ var import_theme_ui11 = require("theme-ui");
214
+
215
+ // src/components/Label/Label.tsx
216
+ var import_theme_ui12 = require("theme-ui");
217
+
218
+ // src/components/Link/Link.tsx
219
+ var import_theme_ui13 = require("theme-ui");
220
+
221
+ // src/components/LinearProgress/LinearProgress.tsx
222
+ var import_theme_ui14 = require("theme-ui");
223
+
224
+ // src/components/Text/Text.tsx
225
+ var import_theme_ui15 = require("theme-ui");
226
+
227
+ // src/components/Select/Select.tsx
228
+ var import_theme_ui16 = require("theme-ui");
229
+
230
+ // src/components/Spinner/Spinner.tsx
231
+ var import_theme_ui17 = require("theme-ui");
232
+
233
+ // src/components/Radio/Radio.tsx
234
+ var import_theme_ui18 = require("theme-ui");
235
+ // Annotate the CommonJS export names for ESM import in node:
236
+ 0 && (module.exports = {
237
+ Box,
238
+ Button,
239
+ Card,
240
+ Divider,
241
+ Flex,
242
+ Grid,
243
+ Heading,
244
+ Image,
245
+ Input,
246
+ Label,
247
+ LinearProgress,
248
+ Link,
249
+ Radio,
250
+ Select,
251
+ Spinner,
252
+ Text,
253
+ ThemeProvider,
254
+ useBreakpointIndex,
255
+ useResponsiveValue,
256
+ useTheme
257
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttoss/ui",
3
- "version": "1.20.4",
3
+ "version": "1.21.0",
4
4
  "description": "Primitive layout, typographic, and other components for styling applications.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "ttoss",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "b9f9de9b8389be76965f125b593166f10c2171e6"
46
+ "gitHead": "8407ac0199e566fb6695f0caddb9f6bed4bf6578"
47
47
  }
@@ -0,0 +1 @@
1
+ export { Radio, type RadioProps } from 'theme-ui';
@@ -6,4 +6,5 @@ test('should export methods', () => {
6
6
  expect(uiModule.useTheme).toBeDefined();
7
7
 
8
8
  expect(uiModule.Divider).toBeDefined();
9
+ expect(uiModule.Radio).toBeDefined();
9
10
  });
package/src/index.ts CHANGED
@@ -26,3 +26,4 @@ export {
26
26
  export { Text, type TextProps } from './components/Text/Text';
27
27
  export { Select, type SelectProps } from './components/Select/Select';
28
28
  export { Spinner, type SpinnerProps } from './components/Spinner/Spinner';
29
+ export { Radio, type RadioProps } from './components/Radio/Radio';