@ponti-studios/ui 1.0.1 → 1.2.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.
Files changed (29) hide show
  1. package/package.json +7 -2
  2. package/src/components/feedback/update-guard.tsx +5 -1
  3. package/src/components/filters/active-filters-bar.stories.tsx +34 -36
  4. package/src/components/filters/filter-select.stories.tsx +26 -26
  5. package/src/components/filters/filter-select.tsx +1 -6
  6. package/src/components/filters/filters.stories.tsx +21 -21
  7. package/src/components/filters/filters.tsx +1 -7
  8. package/src/components/filters/search-filter-bar.stories.tsx +8 -10
  9. package/src/components/filters/search-filter-bar.tsx +6 -8
  10. package/src/components/navigation/app-navigation.stories.tsx +5 -1
  11. package/src/components/navigation/app-navigation.tsx +19 -4
  12. package/src/components/overlays/sheet.tsx +22 -7
  13. package/src/hooks/use-derived-filter-state.ts +1 -3
  14. package/src/hooks/use-filter-state.ts +1 -2
  15. package/src/native/card.tsx +36 -0
  16. package/src/native/icon-button.tsx +41 -0
  17. package/src/native/index.ts +27 -0
  18. package/src/native/list-row.tsx +67 -0
  19. package/src/native/text-field.tsx +34 -0
  20. package/src/native/uniwind.d.ts +1 -0
  21. package/src/styles/animations.css +91 -0
  22. package/src/styles/tokens/generated/foundations.css +1 -0
  23. package/src/styles/tokens/generated/foundations.generated.ts +1 -0
  24. package/src/styles/tokens/generated/native.generated.ts +266 -0
  25. package/src/styles/tokens/index.ts +2 -0
  26. package/src/styles/tokens/normalize-native.ts +88 -0
  27. package/src/styles/tokens/source/foundations.tokens.json +2 -1
  28. package/src/styles/tokens/source/native.tokens.json +204 -0
  29. package/src/styles/tokens/style-dictionary.native.mjs +26 -0
@@ -0,0 +1,204 @@
1
+ {
2
+ "$extensions": {
3
+ "org.ponti.description": "Semantic and component tokens for React Native consumers. Values reference the shared foundations so mobile stays in lockstep with web. Consumed via @ponti-studios/ui/native."
4
+ },
5
+ "space": {
6
+ "$type": "dimension",
7
+ "sm": { "$value": "{spacing-scale.2}" },
8
+ "md": { "$value": "{spacing-scale.3}" },
9
+ "lg": { "$value": "{spacing-scale.4}" },
10
+ "xl": { "$value": "{spacing-scale.6}" }
11
+ },
12
+ "screen-margin": {
13
+ "$type": "dimension",
14
+ "$value": "{spacing-scale.4}"
15
+ },
16
+ "component-size": {
17
+ "$type": "dimension",
18
+ "sm": { "$value": "{spacing-scale.4}" },
19
+ "md": { "$value": "{spacing-scale.6}" },
20
+ "lg": { "$value": "{spacing-scale.8}" },
21
+ "xl": { "$value": "{spacing-scale.11}" },
22
+ "icon": { "$value": "{spacing-scale.5}" }
23
+ },
24
+ "border-radius": {
25
+ "$type": "dimension",
26
+ "sm": { "$value": "{radius.sm}" },
27
+ "md": { "$value": "{radius.md}" },
28
+ "lg": { "$value": "{radius.lg}" },
29
+ "icon": { "$value": "{radius.md}" }
30
+ },
31
+ "stream-item": {
32
+ "$description": "Shared flat list-row look (Inbox, Time, Tasks) — Vercel-style dense list: full-bleed bottom divider, no radius.",
33
+ "$type": "dimension",
34
+ "border-radius": { "$value": { "value": 0, "unit": "rem" } },
35
+ "border-width": { "$value": { "value": 1, "unit": "px" } },
36
+ "gap": { "$value": "{spacing-scale.3}" },
37
+ "icon-size": { "$value": "{component-size.icon}" },
38
+ "min-height": { "$value": "{spacing-scale.14}" },
39
+ "padding-horizontal": { "$value": "{spacing-scale.4}" },
40
+ "padding-vertical": { "$value": "{spacing-scale.2}" }
41
+ },
42
+ "font-family": {
43
+ "$type": "string",
44
+ "primary": { "$value": "System" },
45
+ "mono": { "$value": "Menlo" }
46
+ },
47
+ "text": {
48
+ "$description": "Apple-HIG-aligned type ramp for native editorial text.",
49
+ "large-title": {
50
+ "$type": "typography",
51
+ "$value": {
52
+ "fontSize": { "value": 34, "unit": "px" },
53
+ "lineHeight": { "value": 41, "unit": "px" },
54
+ "fontWeight": "{font-weight.bold}",
55
+ "letterSpacing": { "value": -0.6, "unit": "px" }
56
+ }
57
+ },
58
+ "title1": {
59
+ "$type": "typography",
60
+ "$value": {
61
+ "fontSize": { "value": 28, "unit": "px" },
62
+ "lineHeight": { "value": 34, "unit": "px" },
63
+ "fontWeight": "{font-weight.bold}",
64
+ "letterSpacing": { "value": -0.4, "unit": "px" }
65
+ }
66
+ },
67
+ "title2": {
68
+ "$type": "typography",
69
+ "$value": {
70
+ "fontSize": { "value": 22, "unit": "px" },
71
+ "lineHeight": { "value": 28, "unit": "px" },
72
+ "fontWeight": "{font-weight.semibold}",
73
+ "letterSpacing": { "value": -0.2, "unit": "px" }
74
+ }
75
+ },
76
+ "headline": {
77
+ "$type": "typography",
78
+ "$value": {
79
+ "fontSize": { "value": 17, "unit": "px" },
80
+ "lineHeight": { "value": 22, "unit": "px" },
81
+ "fontWeight": "{font-weight.semibold}",
82
+ "letterSpacing": { "value": -0.1, "unit": "px" }
83
+ }
84
+ },
85
+ "body": {
86
+ "$type": "typography",
87
+ "$value": {
88
+ "fontSize": { "value": 17, "unit": "px" },
89
+ "lineHeight": { "value": 24, "unit": "px" },
90
+ "fontWeight": "{font-weight.normal}",
91
+ "letterSpacing": { "value": 0, "unit": "px" }
92
+ }
93
+ },
94
+ "callout": {
95
+ "$type": "typography",
96
+ "$value": {
97
+ "fontSize": { "value": 16, "unit": "px" },
98
+ "lineHeight": { "value": 22, "unit": "px" },
99
+ "fontWeight": "{font-weight.normal}",
100
+ "letterSpacing": { "value": -0.1, "unit": "px" }
101
+ }
102
+ },
103
+ "subhead": {
104
+ "$type": "typography",
105
+ "$value": {
106
+ "fontSize": { "value": 15, "unit": "px" },
107
+ "lineHeight": { "value": 20, "unit": "px" },
108
+ "fontWeight": "{font-weight.normal}",
109
+ "letterSpacing": { "value": 0, "unit": "px" }
110
+ }
111
+ },
112
+ "footnote": {
113
+ "$type": "typography",
114
+ "$value": {
115
+ "fontSize": { "value": 13, "unit": "px" },
116
+ "lineHeight": { "value": 18, "unit": "px" },
117
+ "fontWeight": "{font-weight.normal}",
118
+ "letterSpacing": { "value": 0, "unit": "px" }
119
+ }
120
+ },
121
+ "caption1": {
122
+ "$type": "typography",
123
+ "$value": {
124
+ "fontSize": { "value": 12, "unit": "px" },
125
+ "lineHeight": { "value": 16, "unit": "px" },
126
+ "fontWeight": "{font-weight.normal}",
127
+ "letterSpacing": { "value": 0, "unit": "px" }
128
+ }
129
+ },
130
+ "caption2": {
131
+ "$type": "typography",
132
+ "$value": {
133
+ "fontSize": { "value": 11, "unit": "px" },
134
+ "lineHeight": { "value": 14, "unit": "px" },
135
+ "fontWeight": "{font-weight.medium}",
136
+ "letterSpacing": { "value": 0.2, "unit": "px" }
137
+ }
138
+ },
139
+ "display": {
140
+ "$type": "typography",
141
+ "$value": {
142
+ "fontSize": { "value": 40, "unit": "px" },
143
+ "lineHeight": { "value": 44, "unit": "px" },
144
+ "fontWeight": "{font-weight.bold}",
145
+ "letterSpacing": { "value": -1.2, "unit": "px" }
146
+ }
147
+ },
148
+ "overline": {
149
+ "$type": "typography",
150
+ "$value": {
151
+ "fontSize": { "value": 11, "unit": "px" },
152
+ "lineHeight": { "value": 16, "unit": "px" },
153
+ "fontWeight": "{font-weight.medium}",
154
+ "letterSpacing": { "value": 0.8, "unit": "px" },
155
+ "textTransform": "uppercase"
156
+ }
157
+ },
158
+ "mono": {
159
+ "$type": "typography",
160
+ "$value": {
161
+ "fontFamily": "{font-family.mono}",
162
+ "fontSize": { "value": 12, "unit": "px" },
163
+ "lineHeight": { "value": 16, "unit": "px" },
164
+ "fontWeight": "{font-weight.normal}",
165
+ "letterSpacing": { "value": 0, "unit": "px" }
166
+ }
167
+ }
168
+ },
169
+ "motion": {
170
+ "$description": "Portable motion semantics. Platform adapters own runtime animation objects and reduced-motion behavior.",
171
+ "duration": {
172
+ "$type": "duration",
173
+ "instant": { "$value": "0ms" },
174
+ "quick": { "$value": "{duration.150}" },
175
+ "standard": { "$value": "{duration.300}" },
176
+ "deliberate": { "$value": "{duration.500}" }
177
+ },
178
+ "easing": {
179
+ "$type": "cubicBezier",
180
+ "enter": { "$value": "{ease.out}" },
181
+ "exit": { "$value": "{ease.in}" },
182
+ "inOut": { "$value": "{ease.in-out}" }
183
+ },
184
+ "distance": {
185
+ "$type": "dimension",
186
+ "rowEnter": { "$value": "{spacing-scale.2}" },
187
+ "sceneReveal": { "$value": "{spacing-scale.8}" }
188
+ },
189
+ "opacity": {
190
+ "$type": "number",
191
+ "hidden": { "$value": 0 },
192
+ "visible": { "$value": 1 },
193
+ "disabled": { "$value": 0.5 }
194
+ },
195
+ "interruption": {
196
+ "$type": "string",
197
+ "policy": { "$value": "cancel-and-settle" }
198
+ },
199
+ "reducedMotion": {
200
+ "$type": "string",
201
+ "policy": { "$value": "replace-transform-with-opacity" }
202
+ }
203
+ }
204
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Emits ONLY the native semantic/component tokens (native.tokens.json) as a
3
+ * typed module. Foundations are kept in the dictionary so references resolve,
4
+ * but are filtered out of the output — they already ship via
5
+ * foundations.generated.ts.
6
+ */
7
+ export default {
8
+ source: [
9
+ "src/styles/tokens/source/foundations.tokens.json",
10
+ "src/styles/tokens/source/native.tokens.json",
11
+ ],
12
+ platforms: {
13
+ typescript: {
14
+ transformGroup: "js",
15
+ buildPath: "src/styles/tokens/generated/",
16
+ files: [
17
+ {
18
+ destination: "native.generated.ts",
19
+ format: "javascript/esm",
20
+ options: { minify: true },
21
+ filter: (token) => token.filePath.includes("native.tokens.json"),
22
+ },
23
+ ],
24
+ },
25
+ },
26
+ };