@opalui/react 0.0.0-stage → 0.0.1

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 (72) hide show
  1. package/dist/components/button/button.css +157 -0
  2. package/dist/components/button/button.css.js +1 -0
  3. package/dist/components/button/button.d.ts +26 -0
  4. package/dist/components/button/button.js +39 -0
  5. package/dist/components/button/button.js.map +1 -0
  6. package/dist/components/glass/glass.css +16 -0
  7. package/dist/components/glass/glass.css.js +1 -0
  8. package/dist/components/glass/glass.d.ts +5 -0
  9. package/dist/components/glass/glass.js +19 -0
  10. package/dist/components/glass/glass.js.map +1 -0
  11. package/dist/components/input/input.css +43 -0
  12. package/dist/components/input/input.css.js +1 -0
  13. package/dist/components/input/input.d.ts +17 -0
  14. package/dist/components/input/input.js +36 -0
  15. package/dist/components/input/input.js.map +1 -0
  16. package/dist/components/menu/menu.css +85 -0
  17. package/dist/components/menu/menu.css.js +1 -0
  18. package/dist/components/menu/menu.d.ts +18 -0
  19. package/dist/components/menu/menu.js +125 -0
  20. package/dist/components/menu/menu.js.map +1 -0
  21. package/dist/components/segmented-control/segmented-control.css +109 -0
  22. package/dist/components/segmented-control/segmented-control.css.js +1 -0
  23. package/dist/components/segmented-control/segmented-control.d.ts +21 -0
  24. package/dist/components/segmented-control/segmented-control.js +147 -0
  25. package/dist/components/segmented-control/segmented-control.js.map +1 -0
  26. package/dist/components/select/select.css +137 -0
  27. package/dist/components/select/select.css.js +1 -0
  28. package/dist/components/select/select.d.ts +27 -0
  29. package/dist/components/select/select.js +140 -0
  30. package/dist/components/select/select.js.map +1 -0
  31. package/dist/components/slider/slider.css +87 -0
  32. package/dist/components/slider/slider.css.js +1 -0
  33. package/dist/components/slider/slider.d.ts +17 -0
  34. package/dist/components/slider/slider.js +40 -0
  35. package/dist/components/slider/slider.js.map +1 -0
  36. package/dist/components/switch/switch.css +103 -0
  37. package/dist/components/switch/switch.css.js +1 -0
  38. package/dist/components/switch/switch.d.ts +14 -0
  39. package/dist/components/switch/switch.js +74 -0
  40. package/dist/components/switch/switch.js.map +1 -0
  41. package/dist/components/textarea/textarea.css +29 -0
  42. package/dist/components/textarea/textarea.css.js +1 -0
  43. package/dist/components/textarea/textarea.d.ts +8 -0
  44. package/dist/components/textarea/textarea.js +17 -0
  45. package/dist/components/textarea/textarea.js.map +1 -0
  46. package/dist/index.d.ts +9 -0
  47. package/dist/index.js +10 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/internal/glass/lens.d.ts +44 -0
  50. package/dist/internal/glass/lens.js +116 -0
  51. package/dist/internal/glass/lens.js.map +1 -0
  52. package/dist/internal/glass/map.d.ts +1 -0
  53. package/dist/internal/glass/map.js +48 -0
  54. package/dist/internal/glass/map.js.map +1 -0
  55. package/dist/internal/glass/material.d.ts +48 -0
  56. package/dist/internal/glass/material.js +22 -0
  57. package/dist/internal/glass/material.js.map +1 -0
  58. package/dist/internal/glass/styles.d.ts +2 -0
  59. package/dist/internal/glass/styles.js +4 -0
  60. package/dist/internal/glass/styles.js.map +1 -0
  61. package/dist/internal/glass/support.d.ts +5 -0
  62. package/dist/internal/glass/support.js +8 -0
  63. package/dist/internal/glass/support.js.map +1 -0
  64. package/dist/internal/glass.css +7 -0
  65. package/dist/internal/glass.css.js +1 -0
  66. package/dist/internal/styles.d.ts +2 -0
  67. package/dist/internal/styles.js +9 -0
  68. package/dist/internal/styles.js.map +1 -0
  69. package/dist/styles.css +11 -0
  70. package/dist/styles.css.js +1 -0
  71. package/package.json +90 -4
  72. package/README.md +0 -3
@@ -0,0 +1,48 @@
1
+ /** OpalUI's material vocabulary. Bend is relative to the lens's shorter side;
2
+ * dispersion is the proportional RGB spread, frost is CSS pixels, rim is 0–1. */
3
+ export type GlassSettings = {
4
+ bend: number;
5
+ dispersion: number;
6
+ frost: number;
7
+ rim: number;
8
+ };
9
+ export declare const materials: {
10
+ surface: {
11
+ bend: number;
12
+ dispersion: number;
13
+ frost: number;
14
+ rim: number;
15
+ };
16
+ field: {
17
+ bend: number;
18
+ dispersion: number;
19
+ frost: number;
20
+ rim: number;
21
+ };
22
+ menu: {
23
+ bend: number;
24
+ dispersion: number;
25
+ frost: number;
26
+ rim: number;
27
+ };
28
+ thumb: {
29
+ bend: number;
30
+ dispersion: number;
31
+ frost: number;
32
+ rim: number;
33
+ };
34
+ switch: {
35
+ bend: number;
36
+ dispersion: number;
37
+ frost: number;
38
+ rim: number;
39
+ };
40
+ selection: {
41
+ bend: number;
42
+ dispersion: number;
43
+ frost: number;
44
+ rim: number;
45
+ };
46
+ };
47
+ export declare function resolveMaterial(base: GlassSettings, overrides?: Partial<GlassSettings>): GlassSettings;
48
+ export declare const materialDefaults: string;
@@ -0,0 +1,22 @@
1
+ export const materials = {
2
+ surface: { bend: .22, dispersion: .12, frost: 2, rim: .3 },
3
+ field: { bend: 0, dispersion: 0, frost: 12, rim: .22 },
4
+ menu: { bend: 0, dispersion: 0, frost: 24, rim: .3 },
5
+ thumb: { bend: .25, dispersion: .2, frost: .15, rim: .4 },
6
+ switch: { bend: .45, dispersion: .04, frost: .25, rim: .65 },
7
+ selection: { bend: .3, dispersion: .16, frost: 0, rim: .4 },
8
+ };
9
+ export function resolveMaterial(base, overrides = {}) {
10
+ const bounded = (key, max) => {
11
+ const value = overrides[key] ?? base[key];
12
+ return Number.isFinite(value) ? Math.max(0, Math.min(max, value)) : base[key];
13
+ };
14
+ return { bend: bounded('bend', .6), dispersion: bounded('dispersion', 1), frost: bounded('frost', 24), rim: bounded('rim', 1) };
15
+ }
16
+ // Shared CSS defaults are derived from these same presets, including the
17
+ // surface-only controls that don't need a displacement filter.
18
+ export const materialDefaults = `
19
+ :where(.opal-input,.opal-textarea,.opal-select) { --opal-material-frost:${materials.field.frost}px; --opal-material-rim:${materials.field.rim}; }
20
+ :where(.opal-menu-panel) { --opal-material-frost:${materials.menu.frost}px; --opal-material-rim:${materials.menu.rim}; }
21
+ `;
22
+ //# sourceMappingURL=material.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material.js","sourceRoot":"","sources":["../../../src/internal/glass/material.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IACtD,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IACpD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;IACzD,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAC5D,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;CACpB,CAAA;AACzC,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,YAAoC,EAAE;IACzF,MAAM,OAAO,GAAG,CAAC,GAAwB,EAAE,GAAW,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/E,CAAC,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;AACjI,CAAC;AAED,yEAAyE;AACzE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG;0EAC0C,SAAS,CAAC,KAAK,CAAC,KAAK,2BAA2B,SAAS,CAAC,KAAK,CAAC,GAAG;mDAC1F,SAAS,CAAC,IAAI,CAAC,KAAK,2BAA2B,SAAS,CAAC,IAAI,CAAC,GAAG;CACnH,CAAA","sourcesContent":["/** OpalUI's material vocabulary. Bend is relative to the lens's shorter side;\n * dispersion is the proportional RGB spread, frost is CSS pixels, rim is 0–1. */\nexport type GlassSettings = { bend: number; dispersion: number; frost: number; rim: number }\nexport const materials = {\n surface: { bend: .22, dispersion: .12, frost: 2, rim: .3 },\n field: { bend: 0, dispersion: 0, frost: 12, rim: .22 },\n menu: { bend: 0, dispersion: 0, frost: 24, rim: .3 },\n thumb: { bend: .25, dispersion: .2, frost: .15, rim: .4 },\n switch: { bend: .45, dispersion: .04, frost: .25, rim: .65 },\n selection: { bend: .3, dispersion: .16, frost: 0, rim: .4 },\n} satisfies Record<string, GlassSettings>\nexport function resolveMaterial(base: GlassSettings, overrides: Partial<GlassSettings> = {}): GlassSettings {\n const bounded = (key: keyof GlassSettings, max: number) => {\n const value = overrides[key] ?? base[key]\n return Number.isFinite(value) ? Math.max(0, Math.min(max, value)) : base[key]\n }\n return { bend: bounded('bend', .6), dispersion: bounded('dispersion', 1), frost: bounded('frost', 24), rim: bounded('rim', 1) }\n}\n\n// Shared CSS defaults are derived from these same presets, including the\n// surface-only controls that don't need a displacement filter.\nexport const materialDefaults = `\n:where(.opal-input,.opal-textarea,.opal-select) { --opal-material-frost:${materials.field.frost}px; --opal-material-rim:${materials.field.rim}; }\n:where(.opal-menu-panel) { --opal-material-frost:${materials.menu.frost}px; --opal-material-rim:${materials.menu.rim}; }\n`\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import css from '../glass.css.js';
2
+ import { materialDefaults } from './material.js';
3
+ export default `${css}\n${materialDefaults}`;
4
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/internal/glass/styles.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,qBAAqB,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,eAAe,GAAG,GAAG,KAAK,gBAAgB,EAAE,CAAA","sourcesContent":["import css from '../glass.css?inline'\nimport { materialDefaults } from './material.js'\nexport default `${css}\\n${materialDefaults}`\n"]}
@@ -0,0 +1,5 @@
1
+ /** WebKit can drop HTML content painted through our animated SVG lens graph.
2
+ * CSS.supports only checks syntax, not whether this graph renders correctly.
3
+ * Include iOS browsers, which also use WebKit despite their browser branding.
4
+ */
5
+ export declare function supportsOwnedGlassLens(userAgent: string): boolean;
@@ -0,0 +1,8 @@
1
+ /** WebKit can drop HTML content painted through our animated SVG lens graph.
2
+ * CSS.supports only checks syntax, not whether this graph renders correctly.
3
+ * Include iOS browsers, which also use WebKit despite their browser branding.
4
+ */
5
+ export function supportsOwnedGlassLens(userAgent) {
6
+ return !/AppleWebKit\//.test(userAgent) || /(?:Chrome|Chromium|Edg)\//.test(userAgent);
7
+ }
8
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../../src/internal/glass/support.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACxF,CAAC","sourcesContent":["/** WebKit can drop HTML content painted through our animated SVG lens graph.\n * CSS.supports only checks syntax, not whether this graph renders correctly.\n * Include iOS browsers, which also use WebKit despite their browser branding.\n */\nexport function supportsOwnedGlassLens(userAgent: string) {\n return !/AppleWebKit\\//.test(userAgent) || /(?:Chrome|Chromium|Edg)\\//.test(userAgent)\n}\n"]}
@@ -0,0 +1,7 @@
1
+
2
+
3
+ /* Shared material. Public variables can be set once on a theme container. */
4
+ :where(.opal-glass, .opal-button, .opal-input, .opal-menu-panel, .opal-switch, .opal-slider, .opal-segmented, .opal-textarea, .opal-select) {
5
+ --_opal-glass-rim: var(--opal-glass-rim, inset 0 0 0 .5px rgb(255 255 255 / 7%), inset .65px 1px .65px rgb(255 255 255 / var(--opal-material-rim, .28)), inset -.4px -.65px .8px rgb(255 255 255 / calc(var(--opal-material-rim, .28) * .43)));
6
+ --_opal-glass-shadow: var(--opal-glass-shadow, 0 3px 8px rgb(15 34 47 / 12%));
7
+ }
@@ -0,0 +1 @@
1
+ export default "/* Shared material. Public variables can be set once on a theme container. */\n:where(.opal-glass, .opal-button, .opal-input, .opal-menu-panel, .opal-switch, .opal-slider, .opal-segmented, .opal-textarea, .opal-select) {\n --_opal-glass-rim: var(--opal-glass-rim, inset 0 0 0 .5px rgb(255 255 255 / 7%), inset .65px 1px .65px rgb(255 255 255 / var(--opal-material-rim, .28)), inset -.4px -.65px .8px rgb(255 255 255 / calc(var(--opal-material-rim, .28) * .43)));\n --_opal-glass-shadow: var(--opal-glass-shadow, 0 3px 8px rgb(15 34 47 / 12%));\n}\n";
@@ -0,0 +1,2 @@
1
+ /** Stable on the server and client; a CSS change creates a new React resource. */
2
+ export declare function stylesheetHref(name: string, css: string): string;
@@ -0,0 +1,9 @@
1
+ /** Stable on the server and client; a CSS change creates a new React resource. */
2
+ export function stylesheetHref(name, css) {
3
+ let hash = 2166136261;
4
+ for (let index = 0; index < css.length; index++) {
5
+ hash = Math.imul(hash ^ css.charCodeAt(index), 16777619);
6
+ }
7
+ return `opalui-${name}-${(hash >>> 0).toString(36)}`;
8
+ }
9
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/internal/styles.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,IAAI,IAAI,GAAG,UAAU,CAAA;IACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;AACtD,CAAC","sourcesContent":["/** Stable on the server and client; a CSS change creates a new React resource. */\nexport function stylesheetHref(name: string, css: string): string {\n let hash = 2166136261\n for (let index = 0; index < css.length; index++) {\n hash = Math.imul(hash ^ css.charCodeAt(index), 16777619)\n }\n return `opalui-${name}-${(hash >>> 0).toString(36)}`\n}\n"]}
@@ -0,0 +1,11 @@
1
+
2
+
3
+ @import './components/button/button.css';
4
+ @import './components/switch/switch.css';
5
+ @import './components/segmented-control/segmented-control.css';
6
+ @import './components/menu/menu.css';
7
+ @import './components/input/input.css';
8
+ @import './components/slider/slider.css';
9
+ @import './components/textarea/textarea.css';
10
+ @import './components/select/select.css';
11
+ @import './components/glass/glass.css';
@@ -0,0 +1 @@
1
+ export default "@import './components/button/button.css';\n@import './components/switch/switch.css';\n@import './components/segmented-control/segmented-control.css';\n@import './components/menu/menu.css';\n@import './components/input/input.css';\n@import './components/slider/slider.css';\n@import './components/textarea/textarea.css';\n@import './components/select/select.css';\n@import './components/glass/glass.css';\n";
package/package.json CHANGED
@@ -1,6 +1,92 @@
1
1
  {
2
2
  "name": "@opalui/react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.1",
4
+ "description": "Simple React components, styled with plain CSS.",
5
+ "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "README.md"
9
+ ],
10
+ "sideEffects": [
11
+ "**/*.css"
12
+ ],
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./styles.css": "./dist/styles.css",
22
+ "./button": {
23
+ "types": "./dist/components/button/button.d.ts",
24
+ "import": "./dist/components/button/button.js",
25
+ "default": "./dist/components/button/button.js"
26
+ },
27
+ "./button.css": "./dist/components/button/button.css",
28
+ "./switch": {
29
+ "types": "./dist/components/switch/switch.d.ts",
30
+ "import": "./dist/components/switch/switch.js",
31
+ "default": "./dist/components/switch/switch.js"
32
+ },
33
+ "./switch.css": "./dist/components/switch/switch.css",
34
+ "./segmented-control": {
35
+ "types": "./dist/components/segmented-control/segmented-control.d.ts",
36
+ "import": "./dist/components/segmented-control/segmented-control.js",
37
+ "default": "./dist/components/segmented-control/segmented-control.js"
38
+ },
39
+ "./segmented-control.css": "./dist/components/segmented-control/segmented-control.css",
40
+ "./menu": {
41
+ "types": "./dist/components/menu/menu.d.ts",
42
+ "import": "./dist/components/menu/menu.js",
43
+ "default": "./dist/components/menu/menu.js"
44
+ },
45
+ "./menu.css": "./dist/components/menu/menu.css",
46
+ "./input": {
47
+ "types": "./dist/components/input/input.d.ts",
48
+ "import": "./dist/components/input/input.js",
49
+ "default": "./dist/components/input/input.js"
50
+ },
51
+ "./input.css": "./dist/components/input/input.css",
52
+ "./slider": {
53
+ "types": "./dist/components/slider/slider.d.ts",
54
+ "import": "./dist/components/slider/slider.js",
55
+ "default": "./dist/components/slider/slider.js"
56
+ },
57
+ "./slider.css": "./dist/components/slider/slider.css",
58
+ "./textarea": {
59
+ "types": "./dist/components/textarea/textarea.d.ts",
60
+ "import": "./dist/components/textarea/textarea.js",
61
+ "default": "./dist/components/textarea/textarea.js"
62
+ },
63
+ "./textarea.css": "./dist/components/textarea/textarea.css",
64
+ "./select": {
65
+ "types": "./dist/components/select/select.d.ts",
66
+ "import": "./dist/components/select/select.js",
67
+ "default": "./dist/components/select/select.js"
68
+ },
69
+ "./select.css": "./dist/components/select/select.css",
70
+ "./glass": {
71
+ "types": "./dist/components/glass/glass.d.ts",
72
+ "import": "./dist/components/glass/glass.js",
73
+ "default": "./dist/components/glass/glass.js"
74
+ },
75
+ "./glass.css": "./dist/components/glass/glass.css"
76
+ },
77
+ "scripts": {
78
+ "build": "bun run build.ts",
79
+ "typecheck": "tsc --noEmit -p tsconfig.json",
80
+ "prepack": "bun run build"
81
+ },
82
+ "peerDependencies": {
83
+ "react": "^19.0.0"
84
+ },
85
+ "devDependencies": {
86
+ "@types/react": "^19.0.0",
87
+ "react": "^19.0.0"
88
+ },
89
+ "publishConfig": {
90
+ "access": "public"
91
+ }
92
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.