@threenative/ui 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.
@@ -0,0 +1,164 @@
1
+ import type { IUiElement } from "./jsx-runtime.js";
2
+ export type IUiBinding = {
3
+ kind: "resource";
4
+ name: string;
5
+ field?: string;
6
+ } | {
7
+ component: string;
8
+ entity: string;
9
+ field?: string;
10
+ kind: "component";
11
+ };
12
+ export interface IUiIr {
13
+ fonts?: IUiFontAssetIr[];
14
+ focusOrder?: string[];
15
+ inputActions?: {
16
+ activate?: string;
17
+ cancel?: string;
18
+ next?: string;
19
+ previous?: string;
20
+ };
21
+ safeArea?: {
22
+ edges?: Array<"bottom" | "left" | "right" | "top">;
23
+ mode: "avoid" | "none";
24
+ };
25
+ schema: "threenative.ui";
26
+ version: "0.1.0";
27
+ root: IUiNodeIr;
28
+ }
29
+ export interface IUiNodeIr {
30
+ action?: string;
31
+ accessibilityLabel?: string;
32
+ anchorId?: string;
33
+ binding?: IUiBinding;
34
+ children?: IUiNodeIr[];
35
+ disabled?: boolean;
36
+ focusable?: boolean;
37
+ id: string;
38
+ image?: IUiImageMetadataIr;
39
+ kind: "bar" | "button" | "column" | "contextMenu" | "image" | "row" | "scrollbar" | "slider" | "stack" | "text" | "touchControl";
40
+ label?: string;
41
+ layout?: IUiLayoutIr;
42
+ max?: number;
43
+ min?: number;
44
+ navigation?: {
45
+ down?: string;
46
+ left?: string;
47
+ right?: string;
48
+ up?: string;
49
+ };
50
+ orientation?: "horizontal" | "vertical";
51
+ role?: "button" | "group" | "image" | "list" | "listitem" | "none" | "progressbar" | "text";
52
+ spans?: IUiRichTextSpanIr[];
53
+ step?: number;
54
+ style?: IUiStyleIr;
55
+ src?: string;
56
+ text?: string;
57
+ value?: number;
58
+ valueText?: string;
59
+ }
60
+ export interface IUiImageMetadataIr {
61
+ atlas?: {
62
+ x: number;
63
+ y: number;
64
+ width: number;
65
+ height: number;
66
+ };
67
+ flipX?: boolean;
68
+ flipY?: boolean;
69
+ nineSlice?: {
70
+ left: number;
71
+ right: number;
72
+ top: number;
73
+ bottom: number;
74
+ };
75
+ scaleMode?: "contain" | "cover" | "stretch";
76
+ sourceSize?: {
77
+ width: number;
78
+ height: number;
79
+ };
80
+ tileSize?: {
81
+ width: number;
82
+ height: number;
83
+ };
84
+ tint?: string;
85
+ }
86
+ export interface IUiFontAssetIr {
87
+ asset: string;
88
+ fallbackFamily?: string;
89
+ family: string;
90
+ glyphRanges?: Array<{
91
+ from: number;
92
+ to: number;
93
+ }>;
94
+ style?: "italic" | "normal";
95
+ weight?: "bold" | "normal" | number;
96
+ }
97
+ export interface IUiRichTextSpanIr {
98
+ accessibilityText?: string;
99
+ color?: string;
100
+ decoration?: "lineThrough" | "none" | "underline";
101
+ fontFamily?: string;
102
+ fontSize?: number;
103
+ italic?: boolean;
104
+ text: string;
105
+ weight?: "bold" | "normal" | number;
106
+ }
107
+ export interface IUiLayoutIr {
108
+ align?: "center" | "end" | "start" | "stretch";
109
+ columnGap?: number;
110
+ direction?: "column" | "row";
111
+ grid?: {
112
+ autoFlow?: "column" | "row";
113
+ columns?: number;
114
+ rows?: number;
115
+ };
116
+ grow?: number;
117
+ height?: number;
118
+ inset?: {
119
+ bottom?: number;
120
+ left?: number;
121
+ right?: number;
122
+ top?: number;
123
+ };
124
+ justify?: "center" | "end" | "spaceBetween" | "start";
125
+ maxHeight?: number;
126
+ maxWidth?: number;
127
+ minHeight?: number;
128
+ minWidth?: number;
129
+ overflow?: "hidden" | "scroll" | "visible";
130
+ padding?: number;
131
+ position?: "absolute" | "relative";
132
+ rowGap?: number;
133
+ width?: number;
134
+ zIndex?: number;
135
+ }
136
+ export interface IUiStyleIr {
137
+ backgroundColor?: string;
138
+ borderColor?: string;
139
+ borderRadius?: number;
140
+ borderWidth?: number;
141
+ color?: string;
142
+ fontFamily?: string;
143
+ fontSize?: number;
144
+ fontWeight?: "bold" | "normal";
145
+ gradient?: {
146
+ angle?: number;
147
+ from: string;
148
+ kind: "linear";
149
+ to: string;
150
+ };
151
+ opacity?: number;
152
+ shadow?: {
153
+ blur?: number;
154
+ color: string;
155
+ offsetX?: number;
156
+ offsetY?: number;
157
+ spread?: number;
158
+ };
159
+ textDecoration?: "lineThrough" | "none" | "underline";
160
+ textAlign?: "center" | "left" | "right";
161
+ wrap?: "character" | "none" | "word";
162
+ }
163
+ export declare function captureUi(root: IUiElement): IUiIr;
164
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export function captureUi(root) {
2
+ if (root.type !== "ui") {
3
+ throw new Error(`Portable UI root must be <ui>, got '${root.type}'.`);
4
+ }
5
+ return {
6
+ ...(root.props.fonts === undefined ? {} : { fonts: root.props.fonts }),
7
+ ...(root.props.focusOrder === undefined ? {} : { focusOrder: root.props.focusOrder }),
8
+ ...(root.props.inputActions === undefined ? {} : { inputActions: root.props.inputActions }),
9
+ ...(root.props.safeArea === undefined ? {} : { safeArea: root.props.safeArea }),
10
+ schema: "threenative.ui",
11
+ version: "0.1.0",
12
+ root: captureNode(root, "ui"),
13
+ };
14
+ }
15
+ function captureNode(element, fallback) {
16
+ if (element.type === "ui") {
17
+ return {
18
+ ...(element.props.accessibilityLabel === undefined ? {} : { accessibilityLabel: element.props.accessibilityLabel }),
19
+ children: childrenOf(element).map((child, index) => captureNode(child, `${fallback}.${child.type}.${index}`)),
20
+ id: element.props.id ?? fallback,
21
+ kind: "stack",
22
+ ...(element.props.role === undefined ? {} : { role: element.props.role }),
23
+ };
24
+ }
25
+ if (!["bar", "button", "column", "contextMenu", "image", "row", "scrollbar", "slider", "stack", "text", "touchControl"].includes(element.type)) {
26
+ throw new Error(`Unsupported portable UI node '${element.type}'.`);
27
+ }
28
+ return {
29
+ ...(element.props.action === undefined ? {} : { action: element.props.action }),
30
+ ...(element.props.accessibilityLabel === undefined ? {} : { accessibilityLabel: element.props.accessibilityLabel }),
31
+ ...(element.props.anchorId === undefined ? {} : { anchorId: element.props.anchorId }),
32
+ ...(element.props.binding === undefined ? {} : { binding: element.props.binding }),
33
+ ...(element.props.disabled === undefined ? {} : { disabled: element.props.disabled }),
34
+ ...(element.props.focusable === undefined ? {} : { focusable: element.props.focusable }),
35
+ ...(element.props.image === undefined ? {} : { image: element.props.image }),
36
+ ...(element.props.label === undefined ? {} : { label: element.props.label }),
37
+ ...(element.props.layout === undefined ? {} : { layout: element.props.layout }),
38
+ ...(element.props.max === undefined ? {} : { max: element.props.max }),
39
+ ...(element.props.min === undefined ? {} : { min: element.props.min }),
40
+ ...(element.props.navigation === undefined ? {} : { navigation: element.props.navigation }),
41
+ ...(element.props.orientation === undefined ? {} : { orientation: element.props.orientation }),
42
+ ...(element.props.role === undefined ? {} : { role: element.props.role }),
43
+ ...(element.props.spans === undefined ? {} : { spans: element.props.spans }),
44
+ ...(element.props.step === undefined ? {} : { step: element.props.step }),
45
+ ...(element.props.style === undefined ? {} : { style: element.props.style }),
46
+ ...(element.props.src === undefined ? {} : { src: element.props.src }),
47
+ ...(element.props.text === undefined ? {} : { text: element.props.text }),
48
+ ...(element.props.value === undefined ? {} : { value: element.props.value }),
49
+ ...(element.props.valueText === undefined ? {} : { valueText: element.props.valueText }),
50
+ children: childrenOf(element).map((child, index) => captureNode(child, `${fallback}.${child.type}.${index}`)),
51
+ id: element.props.id ?? fallback,
52
+ kind: element.type,
53
+ };
54
+ }
55
+ function childrenOf(element) {
56
+ return toArray(element.props.children).filter(isUiElement);
57
+ }
58
+ function toArray(children) {
59
+ return Array.isArray(children) ? children : [children];
60
+ }
61
+ function isUiElement(value) {
62
+ return typeof value === "object" && value !== null && "type" in value && "props" in value;
63
+ }
@@ -0,0 +1,14 @@
1
+ import type { IUiNodeProps } from "./jsx-runtime.js";
2
+ export declare const Ui: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
3
+ export declare const Text: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
4
+ export declare const Button: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
5
+ export declare const Bar: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
6
+ export declare const Image: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
7
+ export declare const Row: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
8
+ export declare const Column: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
9
+ export declare const Stack: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
10
+ export declare const TouchControl: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
11
+ export declare const Slider: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
12
+ export declare const Scrollbar: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
13
+ export declare const ContextMenu: (props: IUiNodeProps) => import("@threenative/ui/jsx-runtime").IUiElement;
14
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,eAAO,MAAM,EAAE,GAAI,OAAO,YAAY,qDAAqB,CAAC;AAC5D,eAAO,MAAM,IAAI,GAAI,OAAO,YAAY,qDAAuB,CAAC;AAChE,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,qDAAyB,CAAC;AACpE,eAAO,MAAM,GAAG,GAAI,OAAO,YAAY,qDAAsB,CAAC;AAC9D,eAAO,MAAM,KAAK,GAAI,OAAO,YAAY,qDAAwB,CAAC;AAClE,eAAO,MAAM,GAAG,GAAI,OAAO,YAAY,qDAAsB,CAAC;AAC9D,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,qDAAyB,CAAC;AACpE,eAAO,MAAM,KAAK,GAAI,OAAO,YAAY,qDAAwB,CAAC;AAClE,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,qDAA+B,CAAC;AAChF,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,qDAAyB,CAAC;AACpE,eAAO,MAAM,SAAS,GAAI,OAAO,YAAY,qDAA4B,CAAC;AAC1E,eAAO,MAAM,WAAW,GAAI,OAAO,YAAY,qDAA8B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx } from "./jsx-runtime.js";
2
+ export const Ui = (props) => jsx("ui", props);
3
+ export const Text = (props) => jsx("text", props);
4
+ export const Button = (props) => jsx("button", props);
5
+ export const Bar = (props) => jsx("bar", props);
6
+ export const Image = (props) => jsx("image", props);
7
+ export const Row = (props) => jsx("row", props);
8
+ export const Column = (props) => jsx("column", props);
9
+ export const Stack = (props) => jsx("stack", props);
10
+ export const TouchControl = (props) => jsx("touchControl", props);
11
+ export const Slider = (props) => jsx("slider", props);
12
+ export const Scrollbar = (props) => jsx("scrollbar", props);
13
+ export const ContextMenu = (props) => jsx("contextMenu", props);
@@ -0,0 +1,4 @@
1
+ export { Bar, Button, Column, ContextMenu, Image, Row, Scrollbar, Slider, Stack, Text, TouchControl, Ui } from "./components.js";
2
+ export { captureUi, type IUiImageMetadataIr, type IUiIr, type IUiLayoutIr, type IUiNodeIr } from "./capture.js";
3
+ export type { IUiElement, IUiNodeProps, UiBinding, UiElementType, UiImageMetadata } from "./jsx-runtime.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACjI,OAAO,EAAE,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAChH,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { Bar, Button, Column, ContextMenu, Image, Row, Scrollbar, Slider, Stack, Text, TouchControl, Ui } from "./components.js";
2
+ export { captureUi } from "./capture.js";
@@ -0,0 +1,181 @@
1
+ export type UiElementType = "bar" | "button" | "column" | "contextMenu" | "image" | "row" | "scrollbar" | "slider" | "stack" | "text" | "touchControl" | "ui";
2
+ export type UiAccessibilityRole = "button" | "group" | "image" | "list" | "listitem" | "none" | "progressbar" | "text";
3
+ export type UiBinding = {
4
+ kind: "resource";
5
+ name: string;
6
+ field?: string;
7
+ } | {
8
+ component: string;
9
+ entity: string;
10
+ field?: string;
11
+ kind: "component";
12
+ };
13
+ export interface IUiNodeProps {
14
+ action?: string;
15
+ accessibilityLabel?: string;
16
+ anchorId?: string;
17
+ binding?: UiBinding;
18
+ children?: UiChild | UiChild[];
19
+ disabled?: boolean;
20
+ focusable?: boolean;
21
+ focusOrder?: string[];
22
+ fonts?: UiFontAsset[];
23
+ id?: string;
24
+ inputActions?: {
25
+ activate?: string;
26
+ cancel?: string;
27
+ next?: string;
28
+ previous?: string;
29
+ };
30
+ image?: UiImageMetadata;
31
+ label?: string;
32
+ layout?: {
33
+ align?: "center" | "end" | "start" | "stretch";
34
+ columnGap?: number;
35
+ direction?: "column" | "row";
36
+ grid?: {
37
+ autoFlow?: "column" | "row";
38
+ columns?: number;
39
+ rows?: number;
40
+ };
41
+ grow?: number;
42
+ height?: number;
43
+ inset?: {
44
+ bottom?: number;
45
+ left?: number;
46
+ right?: number;
47
+ top?: number;
48
+ };
49
+ justify?: "center" | "end" | "spaceBetween" | "start";
50
+ maxHeight?: number;
51
+ maxWidth?: number;
52
+ minHeight?: number;
53
+ minWidth?: number;
54
+ overflow?: "hidden" | "scroll" | "visible";
55
+ padding?: number;
56
+ position?: "absolute" | "relative";
57
+ rowGap?: number;
58
+ width?: number;
59
+ zIndex?: number;
60
+ };
61
+ max?: number;
62
+ min?: number;
63
+ navigation?: {
64
+ down?: string;
65
+ left?: string;
66
+ right?: string;
67
+ up?: string;
68
+ };
69
+ orientation?: "horizontal" | "vertical";
70
+ role?: UiAccessibilityRole;
71
+ spans?: UiRichTextSpan[];
72
+ safeArea?: {
73
+ edges?: Array<"bottom" | "left" | "right" | "top">;
74
+ mode: "avoid" | "none";
75
+ };
76
+ style?: {
77
+ backgroundColor?: string;
78
+ borderColor?: string;
79
+ borderRadius?: number;
80
+ borderWidth?: number;
81
+ color?: string;
82
+ fontFamily?: string;
83
+ fontSize?: number;
84
+ fontWeight?: "bold" | "normal";
85
+ gradient?: {
86
+ angle?: number;
87
+ from: string;
88
+ kind: "linear";
89
+ to: string;
90
+ };
91
+ opacity?: number;
92
+ shadow?: {
93
+ blur?: number;
94
+ color: string;
95
+ offsetX?: number;
96
+ offsetY?: number;
97
+ spread?: number;
98
+ };
99
+ textDecoration?: "lineThrough" | "none" | "underline";
100
+ textAlign?: "center" | "left" | "right";
101
+ wrap?: "character" | "none" | "word";
102
+ };
103
+ src?: string;
104
+ step?: number;
105
+ text?: string;
106
+ value?: number;
107
+ valueText?: string;
108
+ }
109
+ export type UiChild = IUiElement | false | null | undefined;
110
+ export interface UiFontAsset {
111
+ asset: string;
112
+ fallbackFamily?: string;
113
+ family: string;
114
+ glyphRanges?: Array<{
115
+ from: number;
116
+ to: number;
117
+ }>;
118
+ style?: "italic" | "normal";
119
+ weight?: "bold" | "normal" | number;
120
+ }
121
+ export interface UiRichTextSpan {
122
+ accessibilityText?: string;
123
+ color?: string;
124
+ decoration?: "lineThrough" | "none" | "underline";
125
+ fontFamily?: string;
126
+ fontSize?: number;
127
+ italic?: boolean;
128
+ text: string;
129
+ weight?: "bold" | "normal" | number;
130
+ }
131
+ export interface UiImageMetadata {
132
+ atlas?: {
133
+ x: number;
134
+ y: number;
135
+ width: number;
136
+ height: number;
137
+ };
138
+ flipX?: boolean;
139
+ flipY?: boolean;
140
+ nineSlice?: {
141
+ left: number;
142
+ right: number;
143
+ top: number;
144
+ bottom: number;
145
+ };
146
+ scaleMode?: "contain" | "cover" | "stretch";
147
+ sourceSize?: {
148
+ width: number;
149
+ height: number;
150
+ };
151
+ tileSize?: {
152
+ width: number;
153
+ height: number;
154
+ };
155
+ tint?: string;
156
+ }
157
+ export interface IUiElement {
158
+ props: IUiNodeProps;
159
+ type: UiElementType;
160
+ }
161
+ export declare function jsx(type: UiElementType | ((props: IUiNodeProps) => IUiElement), props: IUiNodeProps): IUiElement;
162
+ export declare const jsxs: typeof jsx;
163
+ export declare const Fragment = "stack";
164
+ export declare namespace JSX {
165
+ type Element = IUiElement;
166
+ interface IntrinsicElements {
167
+ bar: IUiNodeProps;
168
+ button: IUiNodeProps;
169
+ column: IUiNodeProps;
170
+ contextMenu: IUiNodeProps;
171
+ image: IUiNodeProps;
172
+ row: IUiNodeProps;
173
+ scrollbar: IUiNodeProps;
174
+ slider: IUiNodeProps;
175
+ stack: IUiNodeProps;
176
+ text: IUiNodeProps;
177
+ touchControl: IUiNodeProps;
178
+ ui: IUiNodeProps;
179
+ }
180
+ }
181
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export function jsx(type, props) {
2
+ if (typeof type === "function") {
3
+ return type(props);
4
+ }
5
+ return { props: props ?? {}, type };
6
+ }
7
+ export const jsxs = jsx;
8
+ export const Fragment = "stack";
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@threenative/ui",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "types": "./dist/index.d.ts",
6
+ "exports": {
7
+ ".": "./dist/index.js",
8
+ "./jsx-runtime": "./dist/jsx-runtime.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "lint": "tsc -p tsconfig.json --noEmit",
19
+ "test": "node scripts/run-tests.mjs",
20
+ "typecheck": "tsc -p tsconfig.json --noEmit"
21
+ }
22
+ }