tentile 0.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/LICENSE +21 -0
- package/README.md +95 -0
- package/dist/components/Badge/Badge.d.ts +2 -0
- package/dist/components/Badge/Badge.types.d.ts +8 -0
- package/dist/components/Badge/index.d.ts +2 -0
- package/dist/components/Button/Button.d.ts +2 -0
- package/dist/components/Button/Button.types.d.ts +9 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Card/Card.d.ts +3 -0
- package/dist/components/Card/Card.types.d.ts +10 -0
- package/dist/components/Card/index.d.ts +2 -0
- package/dist/components/Heading/Heading.d.ts +2 -0
- package/dist/components/Heading/Heading.types.d.ts +8 -0
- package/dist/components/Heading/index.d.ts +2 -0
- package/dist/components/Input/Input.d.ts +2 -0
- package/dist/components/Input/Input.types.d.ts +13 -0
- package/dist/components/Input/index.d.ts +2 -0
- package/dist/components/Link/Link.d.ts +2 -0
- package/dist/components/Link/Link.types.d.ts +6 -0
- package/dist/components/Link/index.d.ts +2 -0
- package/dist/components/Text/Text.d.ts +2 -0
- package/dist/components/Text/Text.types.d.ts +15 -0
- package/dist/components/Text/index.d.ts +2 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +316 -0
- package/dist/tentile.css +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jan tenPas IV
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Tentile
|
|
2
|
+
|
|
3
|
+
A composable React component library built for production. Tiles that snap together to build interfaces.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Composable** — components are designed to work together, not in isolation
|
|
10
|
+
- **Accessible** — ARIA attributes, keyboard navigation, and focus management built in
|
|
11
|
+
- **Typed** — strict TypeScript with full prop interfaces and declaration files
|
|
12
|
+
- **Themeable** — CSS custom properties for every token, dark mode included
|
|
13
|
+
- **Lightweight** — no runtime dependencies, pure CSS Modules
|
|
14
|
+
- **Forward-ref compatible** — every component supports `ref` forwarding
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install tentile
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Requires React 18 or later:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install react react-dom
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Quick start
|
|
33
|
+
|
|
34
|
+
Import styles once at your app entry point:
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import 'tentile/styles'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Then use components anywhere:
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import { Button, Heading, Text, Input, Card, Badge } from 'tentile'
|
|
44
|
+
|
|
45
|
+
export function App() {
|
|
46
|
+
return (
|
|
47
|
+
<Card>
|
|
48
|
+
<Heading level={2}>Welcome back</Heading>
|
|
49
|
+
<Text color="muted">Sign in to your account to continue.</Text>
|
|
50
|
+
<Input
|
|
51
|
+
label="Email address"
|
|
52
|
+
placeholder="you@example.com"
|
|
53
|
+
type="email"
|
|
54
|
+
required
|
|
55
|
+
fullWidth
|
|
56
|
+
/>
|
|
57
|
+
<Button fullWidth>Sign in</Button>
|
|
58
|
+
</Card>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Dark mode
|
|
66
|
+
|
|
67
|
+
Add `data-theme="dark"` to your root element to activate dark mode:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
document.documentElement.setAttribute('data-theme', 'dark')
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Development
|
|
76
|
+
|
|
77
|
+
**Getting started:**
|
|
78
|
+
```bash
|
|
79
|
+
git clone https://github.com/jantenpas/tentile
|
|
80
|
+
cd tentile
|
|
81
|
+
npm install
|
|
82
|
+
npm run dev # Storybook on localhost:6006
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Other commands:**
|
|
86
|
+
```bash
|
|
87
|
+
npm run lint # TypeScript type check
|
|
88
|
+
npm run build # Build library to /dist
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
MIT © [Jan tenPas](https://github.com/jantenpas)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
export type BadgeVariant = 'default' | 'brand' | 'success' | 'warning' | 'error' | 'info';
|
|
3
|
+
export type BadgeSize = 'sm' | 'md';
|
|
4
|
+
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
variant?: BadgeVariant;
|
|
6
|
+
size?: BadgeSize;
|
|
7
|
+
dot?: boolean;
|
|
8
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'ghost';
|
|
3
|
+
export type ButtonSize = 'sm' | 'md' | 'lg';
|
|
4
|
+
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
|
+
variant?: ButtonVariant;
|
|
6
|
+
size?: ButtonSize;
|
|
7
|
+
isLoading?: boolean;
|
|
8
|
+
fullWidth?: boolean;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
export type CardVariant = 'elevated' | 'outlined' | 'filled';
|
|
3
|
+
export type CardPadding = 'none' | 'sm' | 'md' | 'lg';
|
|
4
|
+
export interface CardProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
variant?: CardVariant;
|
|
6
|
+
padding?: CardPadding;
|
|
7
|
+
interactive?: boolean;
|
|
8
|
+
/** Called when the card is activated via keyboard (Enter/Space). Defaults to onClick if not provided. */
|
|
9
|
+
onActivate?: () => void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
3
|
+
export type HeadingSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
4
|
+
export interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
5
|
+
level?: HeadingLevel;
|
|
6
|
+
size?: HeadingSize;
|
|
7
|
+
color?: 'default' | 'muted' | 'brand';
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export type InputSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export type InputStatus = 'default' | 'error';
|
|
4
|
+
export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
5
|
+
label?: string;
|
|
6
|
+
hint?: string;
|
|
7
|
+
error?: string;
|
|
8
|
+
size?: InputSize;
|
|
9
|
+
status?: InputStatus;
|
|
10
|
+
leadingIcon?: ReactNode;
|
|
11
|
+
trailingIcon?: ReactNode;
|
|
12
|
+
fullWidth?: boolean;
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
export type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3
|
+
export type TextWeight = 'regular' | 'medium' | 'semibold' | 'bold';
|
|
4
|
+
export type TextColor = 'default' | 'muted' | 'subtle' | 'brand' | 'error' | 'success';
|
|
5
|
+
export type TextAlign = 'left' | 'center' | 'right';
|
|
6
|
+
export type TextAs = 'p' | 'span' | 'label' | 'div' | 'strong' | 'em' | 'small';
|
|
7
|
+
export interface TextProps extends HTMLAttributes<HTMLElement> {
|
|
8
|
+
as?: TextAs;
|
|
9
|
+
size?: TextSize;
|
|
10
|
+
weight?: TextWeight;
|
|
11
|
+
color?: TextColor;
|
|
12
|
+
align?: TextAlign;
|
|
13
|
+
truncate?: boolean;
|
|
14
|
+
mono?: boolean;
|
|
15
|
+
}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),u=require("react"),H="_button_1medt_1",z="_sm_1medt_34",P="_md_1medt_40",E="_lg_1medt_46",F="_primary_1medt_53",O="_secondary_1medt_69",G="_ghost_1medt_85",J="_fullWidth_1medt_101",Q="_loading_1medt_106",U="_spin_1medt_1",b={button:H,sm:z,md:P,lg:E,primary:F,secondary:O,ghost:G,fullWidth:J,loading:Q,spin:U},B=u.forwardRef(({variant:o="primary",size:a="md",isLoading:s=!1,fullWidth:r=!1,disabled:e,className:t,children:n,..._},i)=>{const c=[b.button,b[o],b[a],r?b.fullWidth:"",s?b.loading:"",t??""].filter(Boolean).join(" ");return l.jsx("button",{ref:i,className:c,disabled:e||s,"aria-disabled":e||s,"aria-busy":s,..._,children:n})});B.displayName="Button";const V="_link_10rne_1",X="_subtle_10rne_24",Y="_unstyled_10rne_35",N={link:V,default:"_default_10rne_14",subtle:X,unstyled:Y},T=u.forwardRef(({variant:o="default",external:a=!1,className:s,children:r,...e},t)=>{const n=[N.link,N[o],s??""].filter(Boolean).join(" "),_=a?{target:"_blank",rel:"noopener noreferrer","aria-label":e["aria-label"]?e["aria-label"]:typeof r=="string"?`${r} (opens in new tab)`:void 0}:{};return l.jsx("a",{ref:t,className:n,..._,...e,children:r})});T.displayName="Link";const Z="_heading_sy96v_1",A="_xs_sy96v_10",D="_sm_sy96v_17",K="_md_sy96v_24",ss="_lg_sy96v_29",ts="_xl_sy96v_33",es="_muted_sy96v_47",ns="_brand_sy96v_51",j={heading:Z,xs:A,sm:D,md:K,lg:ss,xl:ts,"\\32xl":"_\\32xl_sy96v_37",default:"_default_sy96v_43",muted:es,brand:ns},_s={1:"2xl",2:"xl",3:"lg",4:"md",5:"sm",6:"xs"},W=u.forwardRef(({level:o=2,size:a,color:s="default",className:r,children:e,...t},n)=>{const _=`h${o}`,i=a??_s[o],c=[j.heading,j[i],j[s],r??""].filter(Boolean).join(" ");return l.jsx(_,{ref:n,className:c,...t,children:e})});W.displayName="Heading";const os="_text_vdqtp_1",as="_xs_vdqtp_7",rs="_sm_vdqtp_8",ds="_md_vdqtp_9",ls="_lg_vdqtp_10",is="_xl_vdqtp_11",cs="_regular_vdqtp_14",ms="_medium_vdqtp_15",us="_semibold_vdqtp_16",ps="_bold_vdqtp_17",fs="_muted_vdqtp_21",gs="_subtle_vdqtp_22",bs="_brand_vdqtp_23",vs="_error_vdqtp_24",xs="_success_vdqtp_25",ys="_left_vdqtp_28",hs="_center_vdqtp_29",js="_right_vdqtp_30",$s="_truncate_vdqtp_33",ws="_mono_vdqtp_40",f={text:os,xs:as,sm:rs,md:ds,lg:ls,xl:is,regular:cs,medium:ms,semibold:us,bold:ps,default:"_default_vdqtp_20",muted:fs,subtle:gs,brand:bs,error:vs,success:xs,left:ys,center:hs,right:js,truncate:$s,mono:ws},k=u.forwardRef(({as:o="p",size:a="md",weight:s="regular",color:r="default",align:e="left",truncate:t=!1,mono:n=!1,className:_,children:i,...c},p)=>{const g=[f.text,f[a],f[s],f[r],f[e],t?f.truncate:"",n?f.mono:"",_??""].filter(Boolean).join(" "),m=o,h=t&&typeof i=="string"&&!c.title?i:void 0;return l.jsx(m,{ref:p,className:g,title:h,...c,children:i})});k.displayName="Text";const qs="_card_3npr9_1",Ns="_elevated_3npr9_10",Bs="_outlined_3npr9_15",Ts="_filled_3npr9_20",Ws="_none_3npr9_27",ks="_sm_3npr9_28",Ls="_md_3npr9_29",Rs="_lg_3npr9_30",Ms="_interactive_3npr9_33",x={card:qs,elevated:Ns,outlined:Bs,filled:Ts,none:Ws,sm:ks,md:Ls,lg:Rs,interactive:Ms},L=u.forwardRef(({variant:o="elevated",padding:a="md",interactive:s=!1,className:r,children:e,onClick:t,onActivate:n,onKeyDown:_,...i},c)=>{const p=[x.card,x[o],x[a],s?x.interactive:"",r??""].filter(Boolean).join(" "),g=m=>{s&&(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),n?n():t&&t(m)),_==null||_(m)};return l.jsx("div",{ref:c,className:p,tabIndex:s?0:void 0,role:s?"button":void 0,onClick:t,onKeyDown:s?g:_,...i,children:e})});L.displayName="Card";const Is="_badge_1jmo8_1",Ss="_sm_1jmo8_13",Cs="_md_1jmo8_18",Hs="_brand_1jmo8_29",zs="_success_1jmo8_34",Ps="_warning_1jmo8_39",Es="_error_1jmo8_44",Fs="_info_1jmo8_49",Os="_dot_1jmo8_55",y={badge:Is,sm:Ss,md:Cs,default:"_default_1jmo8_24",brand:Hs,success:zs,warning:Ps,error:Es,info:Fs,dot:Os},R=u.forwardRef(({variant:o="default",size:a="md",dot:s=!1,className:r,children:e,...t},n)=>{const _=[y.badge,y[o],y[a],s?y.dot:"",r??""].filter(Boolean).join(" ");return l.jsx("span",{ref:n,className:_,...t,children:e})});R.displayName="Badge";const Gs="_wrapper_iwnmb_1",Js="_fullWidth_iwnmb_7",Qs="_label_iwnmb_12",Us="_required_iwnmb_20",Vs="_inputWrapper_iwnmb_26",Xs="_input_iwnmb_26",Ys="_sm_iwnmb_70",Zs="_md_iwnmb_76",As="_lg_iwnmb_82",Ds="_hasLeading_iwnmb_89",Ks="_hasTrailing_iwnmb_90",st="_iconLeading_iwnmb_92",tt="_iconTrailing_iwnmb_93",et="_error_iwnmb_105",nt="_hint_iwnmb_118",_t="_errorMessage_iwnmb_125",d={wrapper:Gs,fullWidth:Js,label:Qs,required:Us,inputWrapper:Vs,input:Xs,sm:Ys,md:Zs,lg:As,hasLeading:Ds,hasTrailing:Ks,iconLeading:st,iconTrailing:tt,error:et,hint:nt,errorMessage:_t},M=u.forwardRef(({label:o,hint:a,error:s,size:r="md",status:e="default",leadingIcon:t,trailingIcon:n,fullWidth:_=!1,className:i,id:c,required:p,disabled:g,...m},h)=>{const I=u.useId(),v=c??I,$=`${v}-hint`,w=`${v}-error`,q=s?"error":e,S=[d.wrapper,d[r],d[q],t?d.hasLeading:"",n?d.hasTrailing:"",_?d.fullWidth:""].filter(Boolean).join(" "),C=[d.input,i??""].filter(Boolean).join(" ");return l.jsxs("div",{className:S,children:[o&&l.jsx("label",{htmlFor:v,className:[d.label,p?d.required:""].filter(Boolean).join(" "),children:o}),l.jsxs("div",{className:d.inputWrapper,children:[t&&l.jsx("span",{className:d.iconLeading,"aria-hidden":"true",children:t}),l.jsx("input",{ref:h,id:v,className:C,disabled:g,required:p,"aria-required":p,"aria-invalid":q==="error","aria-describedby":s?w:a?$:void 0,...m}),n&&l.jsx("span",{className:d.iconTrailing,"aria-hidden":"true",children:n})]}),s&&l.jsx("span",{id:w,className:d.errorMessage,role:"alert",children:s}),a&&!s&&l.jsx("span",{id:$,className:d.hint,children:a})]})});M.displayName="Input";exports.Badge=R;exports.Button=B;exports.Card=L;exports.Heading=W;exports.Input=M;exports.Link=T;exports.Text=k;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Button } from './components/Button';
|
|
2
|
+
export type { ButtonProps, ButtonVariant, ButtonSize } from './components/Button';
|
|
3
|
+
export { Link } from './components/Link';
|
|
4
|
+
export type { LinkProps, LinkVariant } from './components/Link';
|
|
5
|
+
export { Heading } from './components/Heading';
|
|
6
|
+
export type { HeadingProps, HeadingLevel, HeadingSize } from './components/Heading';
|
|
7
|
+
export { Text } from './components/Text';
|
|
8
|
+
export type { TextProps, TextSize, TextWeight, TextColor, TextAlign, TextAs } from './components/Text';
|
|
9
|
+
export { Card } from './components/Card';
|
|
10
|
+
export type { CardProps, CardVariant, CardPadding } from './components/Card';
|
|
11
|
+
export { Badge } from './components/Badge';
|
|
12
|
+
export type { BadgeProps, BadgeVariant, BadgeSize } from './components/Badge';
|
|
13
|
+
export { Input } from './components/Input';
|
|
14
|
+
export type { InputProps, InputSize, InputStatus } from './components/Input';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { jsx as d, jsxs as N } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as g, useId as L } from "react";
|
|
3
|
+
const M = "_button_1medt_1", I = "_sm_1medt_34", C = "_md_1medt_40", S = "_lg_1medt_46", z = "_primary_1medt_53", H = "_secondary_1medt_69", E = "_ghost_1medt_85", F = "_fullWidth_1medt_101", P = "_loading_1medt_106", R = "_spin_1medt_1", b = {
|
|
4
|
+
button: M,
|
|
5
|
+
sm: I,
|
|
6
|
+
md: C,
|
|
7
|
+
lg: S,
|
|
8
|
+
primary: z,
|
|
9
|
+
secondary: H,
|
|
10
|
+
ghost: E,
|
|
11
|
+
fullWidth: F,
|
|
12
|
+
loading: P,
|
|
13
|
+
spin: R
|
|
14
|
+
}, G = g(
|
|
15
|
+
({
|
|
16
|
+
variant: o = "primary",
|
|
17
|
+
size: a = "md",
|
|
18
|
+
isLoading: t = !1,
|
|
19
|
+
fullWidth: l = !1,
|
|
20
|
+
disabled: n,
|
|
21
|
+
className: s,
|
|
22
|
+
children: e,
|
|
23
|
+
..._
|
|
24
|
+
}, i) => {
|
|
25
|
+
const c = [
|
|
26
|
+
b.button,
|
|
27
|
+
b[o],
|
|
28
|
+
b[a],
|
|
29
|
+
l ? b.fullWidth : "",
|
|
30
|
+
t ? b.loading : "",
|
|
31
|
+
s ?? ""
|
|
32
|
+
].filter(Boolean).join(" ");
|
|
33
|
+
return /* @__PURE__ */ d(
|
|
34
|
+
"button",
|
|
35
|
+
{
|
|
36
|
+
ref: i,
|
|
37
|
+
className: c,
|
|
38
|
+
disabled: n || t,
|
|
39
|
+
"aria-disabled": n || t,
|
|
40
|
+
"aria-busy": t,
|
|
41
|
+
..._,
|
|
42
|
+
children: e
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
G.displayName = "Button";
|
|
48
|
+
const J = "_link_10rne_1", O = "_subtle_10rne_24", Q = "_unstyled_10rne_35", B = {
|
|
49
|
+
link: J,
|
|
50
|
+
default: "_default_10rne_14",
|
|
51
|
+
subtle: O,
|
|
52
|
+
unstyled: Q
|
|
53
|
+
}, U = g(
|
|
54
|
+
({
|
|
55
|
+
variant: o = "default",
|
|
56
|
+
external: a = !1,
|
|
57
|
+
className: t,
|
|
58
|
+
children: l,
|
|
59
|
+
...n
|
|
60
|
+
}, s) => {
|
|
61
|
+
const e = [B.link, B[o], t ?? ""].filter(Boolean).join(" "), _ = a ? {
|
|
62
|
+
target: "_blank",
|
|
63
|
+
rel: "noopener noreferrer",
|
|
64
|
+
"aria-label": n["aria-label"] ? n["aria-label"] : typeof l == "string" ? `${l} (opens in new tab)` : void 0
|
|
65
|
+
} : {};
|
|
66
|
+
return /* @__PURE__ */ d("a", { ref: s, className: e, ..._, ...n, children: l });
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
U.displayName = "Link";
|
|
70
|
+
const V = "_heading_sy96v_1", X = "_xs_sy96v_10", Y = "_sm_sy96v_17", Z = "_md_sy96v_24", A = "_lg_sy96v_29", D = "_xl_sy96v_33", K = "_muted_sy96v_47", tt = "_brand_sy96v_51", x = {
|
|
71
|
+
heading: V,
|
|
72
|
+
xs: X,
|
|
73
|
+
sm: Y,
|
|
74
|
+
md: Z,
|
|
75
|
+
lg: A,
|
|
76
|
+
xl: D,
|
|
77
|
+
"\\32xl": "_\\32xl_sy96v_37",
|
|
78
|
+
default: "_default_sy96v_43",
|
|
79
|
+
muted: K,
|
|
80
|
+
brand: tt
|
|
81
|
+
}, st = {
|
|
82
|
+
1: "2xl",
|
|
83
|
+
2: "xl",
|
|
84
|
+
3: "lg",
|
|
85
|
+
4: "md",
|
|
86
|
+
5: "sm",
|
|
87
|
+
6: "xs"
|
|
88
|
+
}, nt = g(
|
|
89
|
+
({
|
|
90
|
+
level: o = 2,
|
|
91
|
+
size: a,
|
|
92
|
+
color: t = "default",
|
|
93
|
+
className: l,
|
|
94
|
+
children: n,
|
|
95
|
+
...s
|
|
96
|
+
}, e) => {
|
|
97
|
+
const _ = `h${o}`, i = a ?? st[o], c = [
|
|
98
|
+
x.heading,
|
|
99
|
+
x[i],
|
|
100
|
+
x[t],
|
|
101
|
+
l ?? ""
|
|
102
|
+
].filter(Boolean).join(" ");
|
|
103
|
+
return /* @__PURE__ */ d(_, { ref: e, className: c, ...s, children: n });
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
nt.displayName = "Heading";
|
|
107
|
+
const et = "_text_vdqtp_1", _t = "_xs_vdqtp_7", ot = "_sm_vdqtp_8", at = "_md_vdqtp_9", lt = "_lg_vdqtp_10", rt = "_xl_vdqtp_11", dt = "_regular_vdqtp_14", it = "_medium_vdqtp_15", ct = "_semibold_vdqtp_16", mt = "_bold_vdqtp_17", ut = "_muted_vdqtp_21", pt = "_subtle_vdqtp_22", gt = "_brand_vdqtp_23", bt = "_error_vdqtp_24", ft = "_success_vdqtp_25", vt = "_left_vdqtp_28", ht = "_center_vdqtp_29", yt = "_right_vdqtp_30", $t = "_truncate_vdqtp_33", xt = "_mono_vdqtp_40", p = {
|
|
108
|
+
text: et,
|
|
109
|
+
xs: _t,
|
|
110
|
+
sm: ot,
|
|
111
|
+
md: at,
|
|
112
|
+
lg: lt,
|
|
113
|
+
xl: rt,
|
|
114
|
+
regular: dt,
|
|
115
|
+
medium: it,
|
|
116
|
+
semibold: ct,
|
|
117
|
+
bold: mt,
|
|
118
|
+
default: "_default_vdqtp_20",
|
|
119
|
+
muted: ut,
|
|
120
|
+
subtle: pt,
|
|
121
|
+
brand: gt,
|
|
122
|
+
error: bt,
|
|
123
|
+
success: ft,
|
|
124
|
+
left: vt,
|
|
125
|
+
center: ht,
|
|
126
|
+
right: yt,
|
|
127
|
+
truncate: $t,
|
|
128
|
+
mono: xt
|
|
129
|
+
}, qt = g(
|
|
130
|
+
({
|
|
131
|
+
as: o = "p",
|
|
132
|
+
size: a = "md",
|
|
133
|
+
weight: t = "regular",
|
|
134
|
+
color: l = "default",
|
|
135
|
+
align: n = "left",
|
|
136
|
+
truncate: s = !1,
|
|
137
|
+
mono: e = !1,
|
|
138
|
+
className: _,
|
|
139
|
+
children: i,
|
|
140
|
+
...c
|
|
141
|
+
}, u) => {
|
|
142
|
+
const f = [
|
|
143
|
+
p.text,
|
|
144
|
+
p[a],
|
|
145
|
+
p[t],
|
|
146
|
+
p[l],
|
|
147
|
+
p[n],
|
|
148
|
+
s ? p.truncate : "",
|
|
149
|
+
e ? p.mono : "",
|
|
150
|
+
_ ?? ""
|
|
151
|
+
].filter(Boolean).join(" "), m = o, $ = s && typeof i == "string" && !c.title ? i : void 0;
|
|
152
|
+
return /* @__PURE__ */ d(m, { ref: u, className: f, title: $, ...c, children: i });
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
qt.displayName = "Text";
|
|
156
|
+
const wt = "_card_3npr9_1", jt = "_elevated_3npr9_10", Nt = "_outlined_3npr9_15", Bt = "_filled_3npr9_20", Tt = "_none_3npr9_27", Wt = "_sm_3npr9_28", kt = "_md_3npr9_29", Lt = "_lg_3npr9_30", Mt = "_interactive_3npr9_33", h = {
|
|
157
|
+
card: wt,
|
|
158
|
+
elevated: jt,
|
|
159
|
+
outlined: Nt,
|
|
160
|
+
filled: Bt,
|
|
161
|
+
none: Tt,
|
|
162
|
+
sm: Wt,
|
|
163
|
+
md: kt,
|
|
164
|
+
lg: Lt,
|
|
165
|
+
interactive: Mt
|
|
166
|
+
}, It = g(
|
|
167
|
+
({
|
|
168
|
+
variant: o = "elevated",
|
|
169
|
+
padding: a = "md",
|
|
170
|
+
interactive: t = !1,
|
|
171
|
+
className: l,
|
|
172
|
+
children: n,
|
|
173
|
+
onClick: s,
|
|
174
|
+
onActivate: e,
|
|
175
|
+
onKeyDown: _,
|
|
176
|
+
...i
|
|
177
|
+
}, c) => {
|
|
178
|
+
const u = [
|
|
179
|
+
h.card,
|
|
180
|
+
h[o],
|
|
181
|
+
h[a],
|
|
182
|
+
t ? h.interactive : "",
|
|
183
|
+
l ?? ""
|
|
184
|
+
].filter(Boolean).join(" ");
|
|
185
|
+
return /* @__PURE__ */ d(
|
|
186
|
+
"div",
|
|
187
|
+
{
|
|
188
|
+
ref: c,
|
|
189
|
+
className: u,
|
|
190
|
+
tabIndex: t ? 0 : void 0,
|
|
191
|
+
role: t ? "button" : void 0,
|
|
192
|
+
onClick: s,
|
|
193
|
+
onKeyDown: t ? (m) => {
|
|
194
|
+
t && (m.key === "Enter" || m.key === " ") && (m.preventDefault(), e ? e() : s && s(m)), _ == null || _(m);
|
|
195
|
+
} : _,
|
|
196
|
+
...i,
|
|
197
|
+
children: n
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
);
|
|
202
|
+
It.displayName = "Card";
|
|
203
|
+
const Ct = "_badge_1jmo8_1", St = "_sm_1jmo8_13", zt = "_md_1jmo8_18", Ht = "_brand_1jmo8_29", Et = "_success_1jmo8_34", Ft = "_warning_1jmo8_39", Pt = "_error_1jmo8_44", Rt = "_info_1jmo8_49", Gt = "_dot_1jmo8_55", y = {
|
|
204
|
+
badge: Ct,
|
|
205
|
+
sm: St,
|
|
206
|
+
md: zt,
|
|
207
|
+
default: "_default_1jmo8_24",
|
|
208
|
+
brand: Ht,
|
|
209
|
+
success: Et,
|
|
210
|
+
warning: Ft,
|
|
211
|
+
error: Pt,
|
|
212
|
+
info: Rt,
|
|
213
|
+
dot: Gt
|
|
214
|
+
}, Jt = g(
|
|
215
|
+
({
|
|
216
|
+
variant: o = "default",
|
|
217
|
+
size: a = "md",
|
|
218
|
+
dot: t = !1,
|
|
219
|
+
className: l,
|
|
220
|
+
children: n,
|
|
221
|
+
...s
|
|
222
|
+
}, e) => {
|
|
223
|
+
const _ = [
|
|
224
|
+
y.badge,
|
|
225
|
+
y[o],
|
|
226
|
+
y[a],
|
|
227
|
+
t ? y.dot : "",
|
|
228
|
+
l ?? ""
|
|
229
|
+
].filter(Boolean).join(" ");
|
|
230
|
+
return /* @__PURE__ */ d("span", { ref: e, className: _, ...s, children: n });
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
Jt.displayName = "Badge";
|
|
234
|
+
const Ot = "_wrapper_iwnmb_1", Qt = "_fullWidth_iwnmb_7", Ut = "_label_iwnmb_12", Vt = "_required_iwnmb_20", Xt = "_inputWrapper_iwnmb_26", Yt = "_input_iwnmb_26", Zt = "_sm_iwnmb_70", At = "_md_iwnmb_76", Dt = "_lg_iwnmb_82", Kt = "_hasLeading_iwnmb_89", ts = "_hasTrailing_iwnmb_90", ss = "_iconLeading_iwnmb_92", ns = "_iconTrailing_iwnmb_93", es = "_error_iwnmb_105", _s = "_hint_iwnmb_118", os = "_errorMessage_iwnmb_125", r = {
|
|
235
|
+
wrapper: Ot,
|
|
236
|
+
fullWidth: Qt,
|
|
237
|
+
label: Ut,
|
|
238
|
+
required: Vt,
|
|
239
|
+
inputWrapper: Xt,
|
|
240
|
+
input: Yt,
|
|
241
|
+
sm: Zt,
|
|
242
|
+
md: At,
|
|
243
|
+
lg: Dt,
|
|
244
|
+
hasLeading: Kt,
|
|
245
|
+
hasTrailing: ts,
|
|
246
|
+
iconLeading: ss,
|
|
247
|
+
iconTrailing: ns,
|
|
248
|
+
error: es,
|
|
249
|
+
hint: _s,
|
|
250
|
+
errorMessage: os
|
|
251
|
+
}, as = g(
|
|
252
|
+
({
|
|
253
|
+
label: o,
|
|
254
|
+
hint: a,
|
|
255
|
+
error: t,
|
|
256
|
+
size: l = "md",
|
|
257
|
+
status: n = "default",
|
|
258
|
+
leadingIcon: s,
|
|
259
|
+
trailingIcon: e,
|
|
260
|
+
fullWidth: _ = !1,
|
|
261
|
+
className: i,
|
|
262
|
+
id: c,
|
|
263
|
+
required: u,
|
|
264
|
+
disabled: f,
|
|
265
|
+
...m
|
|
266
|
+
}, $) => {
|
|
267
|
+
const T = L(), v = c ?? T, q = `${v}-hint`, w = `${v}-error`, j = t ? "error" : n, W = [
|
|
268
|
+
r.wrapper,
|
|
269
|
+
r[l],
|
|
270
|
+
r[j],
|
|
271
|
+
s ? r.hasLeading : "",
|
|
272
|
+
e ? r.hasTrailing : "",
|
|
273
|
+
_ ? r.fullWidth : ""
|
|
274
|
+
].filter(Boolean).join(" "), k = [r.input, i ?? ""].filter(Boolean).join(" ");
|
|
275
|
+
return /* @__PURE__ */ N("div", { className: W, children: [
|
|
276
|
+
o && /* @__PURE__ */ d(
|
|
277
|
+
"label",
|
|
278
|
+
{
|
|
279
|
+
htmlFor: v,
|
|
280
|
+
className: [r.label, u ? r.required : ""].filter(Boolean).join(" "),
|
|
281
|
+
children: o
|
|
282
|
+
}
|
|
283
|
+
),
|
|
284
|
+
/* @__PURE__ */ N("div", { className: r.inputWrapper, children: [
|
|
285
|
+
s && /* @__PURE__ */ d("span", { className: r.iconLeading, "aria-hidden": "true", children: s }),
|
|
286
|
+
/* @__PURE__ */ d(
|
|
287
|
+
"input",
|
|
288
|
+
{
|
|
289
|
+
ref: $,
|
|
290
|
+
id: v,
|
|
291
|
+
className: k,
|
|
292
|
+
disabled: f,
|
|
293
|
+
required: u,
|
|
294
|
+
"aria-required": u,
|
|
295
|
+
"aria-invalid": j === "error",
|
|
296
|
+
"aria-describedby": t ? w : a ? q : void 0,
|
|
297
|
+
...m
|
|
298
|
+
}
|
|
299
|
+
),
|
|
300
|
+
e && /* @__PURE__ */ d("span", { className: r.iconTrailing, "aria-hidden": "true", children: e })
|
|
301
|
+
] }),
|
|
302
|
+
t && /* @__PURE__ */ d("span", { id: w, className: r.errorMessage, role: "alert", children: t }),
|
|
303
|
+
a && !t && /* @__PURE__ */ d("span", { id: q, className: r.hint, children: a })
|
|
304
|
+
] });
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
as.displayName = "Input";
|
|
308
|
+
export {
|
|
309
|
+
Jt as Badge,
|
|
310
|
+
G as Button,
|
|
311
|
+
It as Card,
|
|
312
|
+
nt as Heading,
|
|
313
|
+
as as Input,
|
|
314
|
+
U as Link,
|
|
315
|
+
qt as Text
|
|
316
|
+
};
|
package/dist/tentile.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Sora:wght@600;700&family=Plus+Jakarta+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap";:root{--color-brand-50: #F0FDFA;--color-brand-100: #CCFBF1;--color-brand-200: #99F6E4;--color-brand-300: #5EEAD4;--color-brand-400: #2DD4BF;--color-brand-500: #14B8A6;--color-brand-600: #0D9488;--color-brand-700: #0F766E;--color-brand-800: #115E59;--color-brand-900: #134E4A;--color-neutral-0: #FFFFFF;--color-neutral-50: #FAFAF9;--color-neutral-100: #F5F5F4;--color-neutral-200: #E7E5E4;--color-neutral-300: #D6D3D1;--color-neutral-400: #A8A29E;--color-neutral-500: #78716C;--color-neutral-600: #57534E;--color-neutral-700: #44403C;--color-neutral-800: #292524;--color-neutral-900: #1C1917;--color-neutral-1000: #0C0A09;--color-success-light: #d3f9d8;--color-success: #2f9e44;--color-success-dark: #1e6e2e;--color-warning-light: #fff3bf;--color-warning: #f08c00;--color-warning-dark: #b35900;--color-error-light: #ffe3e3;--color-error: #e03131;--color-error-dark: #a61e1e;--color-info-light: #d0ebff;--color-info: #1971c2;--color-info-dark: #0d3d73;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--radius-sm: .25rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-full: 9999px;--font-family-heading: "Sora", system-ui, sans-serif;--font-family-sans: "Plus Jakarta Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-family-mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.2;--line-height-snug: 1.375;--line-height-normal: 1.5;--line-height-loose: 1.75;--letter-spacing-tight: -.025em;--letter-spacing-normal: 0em;--letter-spacing-wide: .025em;--letter-spacing-wider: .05em;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--transition-fast: .1s ease;--transition-normal: .2s ease;--transition-slow: .3s ease;--z-base: 0;--z-raised: 10;--z-overlay: 100;--z-modal: 200;--z-toast: 300}[data-theme=dark]{--color-brand-50: #0D2E2B;--color-brand-100: #0F3D39;--color-brand-200: #115E59;--color-brand-300: #0F766E;--color-brand-400: #0D9488;--color-brand-500: #14B8A6;--color-brand-600: #2DD4BF;--color-brand-700: #5EEAD4;--color-brand-800: #99F6E4;--color-brand-900: #CCFBF1;--color-neutral-0: #1C1917;--color-neutral-50: #141412;--color-neutral-100: #292524;--color-neutral-200: #44403C;--color-neutral-300: #57534E;--color-neutral-400: #78716C;--color-neutral-500: #A8A29E;--color-neutral-600: #D6D3D1;--color-neutral-700: #E7E5E4;--color-neutral-800: #F5F5F4;--color-neutral-900: #FAFAF9;--color-neutral-1000: #FFFFFF;--color-success-light: #052E16;--color-success: #4ADE80;--color-success-dark: #86EFAC;--color-warning-light: #2D1F00;--color-warning: #FBBF24;--color-warning-dark: #FDE68A;--color-error-light: #2D0A0A;--color-error: #F87171;--color-error-dark: #FECACA;--color-info-light: #0A1929;--color-info: #60A5FA;--color-info-dark: #BAE6FD;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .3);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5), 0 4px 6px -4px rgb(0 0 0 / .4);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .6), 0 8px 10px -6px rgb(0 0 0 / .5)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}._button_1medt_1{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);border:1px solid transparent;transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),opacity var(--transition-fast);cursor:pointer;white-space:nowrap;text-decoration:none;line-height:1}._button_1medt_1:focus-visible{outline:2px solid var(--color-brand-700);outline-offset:2px}._button_1medt_1:disabled,._button_1medt_1[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}._sm_1medt_34{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3);height:2rem}._md_1medt_40{font-size:var(--font-size-md);padding:var(--space-2) var(--space-4);height:2.5rem}._lg_1medt_46{font-size:var(--font-size-lg);padding:var(--space-3) var(--space-6);height:3rem}._primary_1medt_53{background-color:var(--color-brand-700);color:var(--color-neutral-0);border-color:var(--color-brand-700)}._primary_1medt_53:hover:not(:disabled){background-color:var(--color-brand-800);border-color:var(--color-brand-800)}._primary_1medt_53:active:not(:disabled){background-color:var(--color-brand-900);border-color:var(--color-brand-900)}._secondary_1medt_69{background-color:var(--color-neutral-0);color:var(--color-brand-700);border-color:var(--color-brand-700)}._secondary_1medt_69:hover:not(:disabled){background-color:var(--color-brand-50);color:var(--color-brand-900);border-color:var(--color-brand-800)}._secondary_1medt_69:active:not(:disabled){background-color:var(--color-brand-100)}._ghost_1medt_85{background-color:transparent;color:var(--color-neutral-700);border-color:transparent}._ghost_1medt_85:hover:not(:disabled){background-color:var(--color-neutral-100);color:var(--color-neutral-900)}._ghost_1medt_85:active:not(:disabled){background-color:var(--color-neutral-200)}._fullWidth_1medt_101{width:100%}._loading_1medt_106{position:relative;color:transparent;pointer-events:none}._loading_1medt_106:after{content:"";position:absolute;width:1em;height:1em;border:2px solid white;border-right-color:transparent;border-radius:50%;animation:_spin_1medt_1 .6s linear infinite}._secondary_1medt_69._loading_1medt_106:after,._ghost_1medt_85._loading_1medt_106:after{border-color:var(--color-brand-700);border-right-color:transparent}@keyframes _spin_1medt_1{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){._button_1medt_1{transition:none}._loading_1medt_106:after{animation:none;opacity:.5}}._link_10rne_1{font-family:var(--font-family-sans);transition:color var(--transition-fast);cursor:pointer}._link_10rne_1:focus-visible{outline:2px solid var(--color-brand-700);outline-offset:2px;border-radius:var(--radius-sm)}._default_10rne_14{color:var(--color-brand-700);text-decoration:underline;text-underline-offset:2px}._default_10rne_14:hover{color:var(--color-brand-800)}._subtle_10rne_24{color:var(--color-neutral-700);text-decoration:none}._subtle_10rne_24:hover{color:var(--color-neutral-900);text-decoration:underline;text-underline-offset:2px}._unstyled_10rne_35{color:inherit;text-decoration:none}._heading_sy96v_1{font-family:var(--font-family-heading);font-weight:var(--font-weight-bold);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-tight);margin:0}._xs_sy96v_10{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-normal);line-height:var(--line-height-normal)}._sm_sy96v_17{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);line-height:var(--line-height-snug);letter-spacing:var(--letter-spacing-normal)}._md_sy96v_24{font-size:var(--font-size-2xl);line-height:var(--line-height-snug)}._lg_sy96v_29{font-size:var(--font-size-3xl)}._xl_sy96v_33{font-size:var(--font-size-4xl)}._\\32xl_sy96v_37{font-size:clamp(2.5rem,5vw,4rem);letter-spacing:-.03em}._default_sy96v_43{color:var(--color-neutral-900)}._muted_sy96v_47{color:var(--color-neutral-600)}._brand_sy96v_51{color:var(--color-brand-700)}._text_vdqtp_1{font-family:var(--font-family-sans);margin:0}._xs_vdqtp_7{font-size:var(--font-size-xs);line-height:var(--line-height-normal)}._sm_vdqtp_8{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}._md_vdqtp_9{font-size:var(--font-size-md);line-height:var(--line-height-normal)}._lg_vdqtp_10{font-size:var(--font-size-lg);line-height:var(--line-height-normal)}._xl_vdqtp_11{font-size:var(--font-size-xl);line-height:var(--line-height-normal)}._regular_vdqtp_14{font-weight:var(--font-weight-regular)}._medium_vdqtp_15{font-weight:var(--font-weight-medium)}._semibold_vdqtp_16{font-weight:var(--font-weight-semibold)}._bold_vdqtp_17{font-weight:var(--font-weight-bold)}._default_vdqtp_20{color:var(--color-neutral-900)}._muted_vdqtp_21{color:var(--color-neutral-600)}._subtle_vdqtp_22{color:var(--color-neutral-500)}._brand_vdqtp_23{color:var(--color-brand-700)}._error_vdqtp_24{color:var(--color-error-dark)}._success_vdqtp_25{color:var(--color-success)}._left_vdqtp_28{text-align:left}._center_vdqtp_29{text-align:center}._right_vdqtp_30{text-align:right}._truncate_vdqtp_33{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._mono_vdqtp_40{font-family:var(--font-family-mono);font-size:.9em}._card_3npr9_1{background-color:var(--color-neutral-0);border-radius:var(--radius-lg);transition:box-shadow var(--transition-normal),transform var(--transition-normal)}._elevated_3npr9_10{box-shadow:var(--shadow-md);border:1px solid var(--color-neutral-200)}._outlined_3npr9_15{box-shadow:none;border:1px solid var(--color-neutral-200)}._filled_3npr9_20{box-shadow:none;border:1px solid transparent;background-color:var(--color-neutral-100)}._none_3npr9_27{padding:0}._sm_3npr9_28{padding:var(--space-3)}._md_3npr9_29{padding:var(--space-6)}._lg_3npr9_30{padding:var(--space-8)}._interactive_3npr9_33{cursor:pointer}._interactive_3npr9_33:hover{box-shadow:var(--shadow-lg);transform:translateY(-1px)}._interactive_3npr9_33:active{box-shadow:var(--shadow-sm);transform:translateY(0)}._interactive_3npr9_33:focus-visible{outline:2px solid var(--color-brand-700);outline-offset:2px}@media(prefers-reduced-motion:reduce){._card_3npr9_1{transition:none}._interactive_3npr9_33:hover,._interactive_3npr9_33:active{transform:none}}._badge_1jmo8_1{display:inline-flex;align-items:center;gap:var(--space-1);font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);border-radius:var(--radius-full);white-space:nowrap;line-height:1}._sm_1jmo8_13{font-size:var(--font-size-xs);padding:.2rem var(--space-2)}._md_1jmo8_18{font-size:var(--font-size-sm);padding:.25rem var(--space-3)}._default_1jmo8_24{background-color:var(--color-neutral-200);color:var(--color-neutral-800)}._brand_1jmo8_29{background-color:var(--color-brand-100);color:var(--color-brand-900)}._success_1jmo8_34{background-color:var(--color-success-light);color:var(--color-success-dark)}._warning_1jmo8_39{background-color:var(--color-warning-light);color:var(--color-neutral-900)}._error_1jmo8_44{background-color:var(--color-error-light);color:var(--color-error-dark)}._info_1jmo8_49{background-color:var(--color-info-light);color:var(--color-info-dark)}._dot_1jmo8_55:before{content:"";display:inline-block;width:.425em;height:.425em;border-radius:var(--radius-full);background-color:currentColor;flex-shrink:0}._wrapper_iwnmb_1{display:inline-flex;flex-direction:column;gap:var(--space-1)}._fullWidth_iwnmb_7{width:100%}._label_iwnmb_12{font-family:var(--font-family-sans);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-neutral-700);line-height:var(--line-height-normal)}._required_iwnmb_20:after{content:" *";color:var(--color-error-dark)}._inputWrapper_iwnmb_26{position:relative;display:flex;align-items:center}._input_iwnmb_26{width:100%;font-family:var(--font-family-sans);font-weight:var(--font-weight-regular);color:var(--color-neutral-900);background-color:var(--color-neutral-0);border:1px solid var(--color-neutral-300);border-radius:var(--radius-md);transition:border-color var(--transition-fast),box-shadow var(--transition-fast);outline:none}._input_iwnmb_26::placeholder{color:var(--color-neutral-400)}._input_iwnmb_26:hover:not(:disabled):not(:focus){border-color:var(--color-neutral-400)}._input_iwnmb_26:focus{border-color:var(--color-brand-700);outline:2px solid var(--color-brand-700);outline-offset:2px;box-shadow:none}._input_iwnmb_26:disabled{background-color:var(--color-neutral-100);color:var(--color-neutral-400);cursor:not-allowed;border-color:var(--color-neutral-200)}._sm_iwnmb_70 ._input_iwnmb_26{font-size:var(--font-size-sm);padding:var(--space-1) var(--space-3);height:2rem}._md_iwnmb_76 ._input_iwnmb_26{font-size:var(--font-size-md);padding:var(--space-2) var(--space-3);height:2.5rem}._lg_iwnmb_82 ._input_iwnmb_26{font-size:var(--font-size-lg);padding:var(--space-3) var(--space-4);height:3rem}._hasLeading_iwnmb_89 ._input_iwnmb_26{padding-left:2.25rem}._hasTrailing_iwnmb_90 ._input_iwnmb_26{padding-right:2.25rem}._iconLeading_iwnmb_92,._iconTrailing_iwnmb_93{position:absolute;display:flex;align-items:center;color:var(--color-neutral-500);pointer-events:none}._iconLeading_iwnmb_92{left:var(--space-3)}._iconTrailing_iwnmb_93{right:var(--space-3)}._error_iwnmb_105 ._input_iwnmb_26{border-color:var(--color-error)}._error_iwnmb_105 ._input_iwnmb_26:focus{border-color:var(--color-error-dark);outline:2px solid var(--color-error-dark);outline-offset:2px;box-shadow:none}._hint_iwnmb_118{font-family:var(--font-family-sans);font-size:var(--font-size-xs);color:var(--color-neutral-500);line-height:var(--line-height-normal)}._errorMessage_iwnmb_125{font-family:var(--font-family-sans);font-size:var(--font-size-xs);color:var(--color-error-dark);line-height:var(--line-height-normal)}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tentile",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A React component library by Jan tenPas — tiles that snap together to build interfaces",
|
|
5
|
+
"author": "Jan tenPas",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.cjs",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
},
|
|
17
|
+
"./styles": "./dist/tentile.css"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": [
|
|
23
|
+
"**/*.css"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"dev": "storybook dev -p 6006",
|
|
27
|
+
"build": "tsc && vite build",
|
|
28
|
+
"build-storybook": "storybook build",
|
|
29
|
+
"prepublishOnly": "npm run build",
|
|
30
|
+
"lint": "tsc --noEmit"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": ">=18.0.0",
|
|
34
|
+
"react-dom": ">=18.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@storybook/addon-essentials": "^8.6.14",
|
|
38
|
+
"@storybook/react": "^8.6.17",
|
|
39
|
+
"@storybook/react-vite": "^8.6.17",
|
|
40
|
+
"@types/react": "^18.0.0",
|
|
41
|
+
"@types/react-dom": "^18.0.0",
|
|
42
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
43
|
+
"react": "^19.0.0",
|
|
44
|
+
"react-dom": "^19.0.0",
|
|
45
|
+
"storybook": "^8.6.17",
|
|
46
|
+
"typescript": "^5.0.0",
|
|
47
|
+
"vite": "^6.0.0",
|
|
48
|
+
"vite-plugin-dts": "^5.0.0-beta.6"
|
|
49
|
+
}
|
|
50
|
+
}
|