@rogieking/figui3 2.29.0 → 2.29.2

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,257 @@
1
+ ---
2
+ name: figui3
3
+ description: Guides development and maintenance of the FigUI3 web components library for Figma-style plugin UIs. Applies when adding or modifying `fig-*` custom elements, updating docs/demo pages, adjusting theme tokens, improving accessibility, or debugging component behavior in `fig.js`, `components.css`, `index.html`, and `README.md`.
4
+ user-invocable: false
5
+ ---
6
+
7
+ # FigUI3
8
+
9
+ A lightweight web components library for Figma UI3-style plugin and widget interfaces.
10
+
11
+ > IMPORTANT: Prefer the project's native scripts and structure. Use `bun dev` for local docs/demo work and `bun build` for production output.
12
+
13
+ ## Current Project Context
14
+
15
+ ```json
16
+ !`node -e "const p=require('./package.json'); console.log(JSON.stringify({name:p.name,version:p.version,scripts:p.scripts,exports:p.exports},null,2))" 2>/dev/null || echo '{"error":"package.json not found"}'`
17
+ ```
18
+
19
+ The JSON above is the source of truth for package name, build commands, and exported files.
20
+
21
+ ## Principles
22
+
23
+ 1. **Preserve native Web Components patterns.** Keep components framework-agnostic and rooted in custom elements.
24
+ 2. **Prefer existing `fig-*` components over one-off markup.** Compose from current primitives before inventing new ones.
25
+ 3. **Keep Figma UI3 visual consistency.** Use existing CSS variables and spacing/radius conventions.
26
+ 4. **Honor interaction semantics.** Emit `input` while interacting and `change` on committed value changes.
27
+ 5. **Treat accessibility as required behavior.** Preserve labels, keyboard support, ARIA attributes, and disabled states.
28
+
29
+ ## React + Vite Integration
30
+
31
+ ### Install and bootstrap in React
32
+
33
+ - Install package: `npm i @rogieking/figui3` (or `pnpm add` / `bun add`).
34
+ - Import CSS once in app entry (`main.tsx` / `main.jsx`): `import "@rogieking/figui3/fig.css";`
35
+ - Register custom elements before first render. In Vite/React, prefer an explicit bootstrap:
36
+
37
+ ```tsx
38
+ import "@rogieking/figui3/fig.css";
39
+
40
+ const bootstrap = async () => {
41
+ // Prevent production tree-shaking from dropping registration side effects.
42
+ await import("@rogieking/figui3/fig.js");
43
+ createRoot(document.getElementById("app")!).render(<App />);
44
+ };
45
+
46
+ bootstrap();
47
+ ```
48
+
49
+ ### Vite config guidance
50
+
51
+ - Standard React Vite config is usually enough:
52
+
53
+ ```ts
54
+ import { defineConfig } from "vite";
55
+ import react from "@vitejs/plugin-react";
56
+
57
+ export default defineConfig({
58
+ plugins: [react()],
59
+ });
60
+ ```
61
+
62
+ - Keep FigUI3 registration import at the top-level app bootstrap (not inside leaf components).
63
+ - If a production build appears to tree-shake element registration, use the explicit dynamic import pattern above.
64
+
65
+ ### React usage rules for web components
66
+
67
+ - Use DOM attrs on custom elements (`<fig-slider text="true" />`) and read values from `e.target` / `e.detail`.
68
+ - In React, use `class` (not `className`) for all FigUI3 web components (`fig-*` and `<dialog is="fig-...">`) to keep attribute behavior consistent.
69
+ - Prefer refs + `addEventListener` when wiring complex `input`/`change` behavior.
70
+
71
+ ### React + color picker modes (`fig-input-color` / `fig-fill-picker`)
72
+
73
+ - `fig-input-color` supports custom mode workflows only through `picker="figma"` (internally uses `fig-fill-picker`).
74
+ - The `mode` attribute on `fig-input-color` is pass-through to inner `fig-fill-picker`; mode logic lives in `fig-fill-picker`.
75
+ - `picker-*` attrs on `fig-input-color` are forwarded to `fig-fill-picker` (except `picker-anchor`, which is handled separately).
76
+ - Example: `picker-dialog-position`, `picker-experimental`, etc.
77
+ - For React custom modes, use `fig-fill-picker` + slot API:
78
+ - Add a child with `slot="mode-<name>"` (and optional `label`).
79
+ - Include `<name>` in the `mode` attribute (e.g. `mode="solid,react-demo"`).
80
+ - Listen for `modeready` and render into `e.detail.container`.
81
+ - Do not reparent React-owned DOM into the picker after render; use the provided `modeready` container as mount target.
82
+ - Keep React lifecycle cleanup explicit for custom mode mounts:
83
+ - keep one `root` per mode container
84
+ - call `root.unmount()` when the host component unmounts
85
+ - remove `modeready` listeners in cleanup to avoid duplicate mounts
86
+ - Custom mode content must dispatch `input` / `change` with `detail` payload so picker can store mode data and propagate events.
87
+ - Preserve value shape expectations:
88
+ - `fig-input-color` expects solid color data (`detail.color`, optional `detail.alpha`) from the picker.
89
+ - `fig-fill-picker` custom modes use JSON with `type` set to mode name and remaining data in payload.
90
+ - Keep `picker-anchor` behavior explicit in React:
91
+ - `picker-anchor="self"` anchors to the color input element itself.
92
+ - Selector values anchor to another DOM element (resolved via `document.querySelector`).
93
+
94
+ ## Experimental Attribute Guidance
95
+
96
+ - Use `experimental` as a feature-flag string for opt-in behavior. Treat it as progressive enhancement, not guaranteed baseline behavior.
97
+ - Prefer `experimental="modern"` when enabling modern customizable select/picker UI behavior.
98
+ - Keep usage explicit on the component that needs it (for example `fig-dropdown`, `fig-fill-picker`, `fig-input-fill`, `fig-input-color`).
99
+ - Preserve pass-through behavior:
100
+ - `fig-input-color` and `fig-input-fill` forward experimental-related picker settings into internal `fig-fill-picker` usage.
101
+ - Avoid adding hidden implicit defaults that enable experimental behavior globally.
102
+ - Backward-compat rule:
103
+ - Do not reintroduce `variant="neue"` for dropdown experimental behavior.
104
+ - Keep `variant="neue"` handling only where it is still intentionally supported (for example slider visuals).
105
+ - Documentation rule: any new experimental token must be documented with activation syntax, intended scope, and fallback behavior in demos + README + changelog.
106
+
107
+ ## Critical Rules
108
+
109
+ ### Overlay Components (`fig-dialog`, `fig-popup`)
110
+
111
+ - Choose the overlay primitive intentionally:
112
+ - **`<dialog is="fig-dialog">`** for modal/light-dismiss dialog workflows.
113
+ - **`<dialog is="fig-popup">`** for anchored floating surfaces (menus, contextual panels, nested popups).
114
+ - Keep overlay semantics stable:
115
+ - `fig-dialog` should remain dialog-first (title/header/footer patterns, modal semantics).
116
+ - `fig-popup` should remain anchor/position-first (offset, collision handling, viewport margins).
117
+ - Preserve drag and positioning behavior on both `fig-dialog` and `fig-popup`; do not regress manual placement rules.
118
+ - For popup chains, maintain containment and dismissal logic across descendant popups.
119
+ - Document any overlay behavior change in demos and changelog with a concrete before/after note.
120
+
121
+ ### Component Architecture
122
+
123
+ - Extend `HTMLElement` and implement lifecycle cleanup in `disconnectedCallback`.
124
+ - Use `observedAttributes` + `attributeChangedCallback` for attribute-driven reactivity.
125
+ - Keep attribute names and behavior backward-compatible unless explicitly doing a breaking change.
126
+ - Support `disabled` behavior wherever interaction is possible.
127
+ - Avoid introducing framework-specific assumptions in component internals.
128
+
129
+ ### Events and Data Contracts
130
+
131
+ - Emit standard `input` and `change` events for form-like controls.
132
+ - Put rich payloads in `event.detail` when needed; keep names stable.
133
+ - Do not silently change event payload shape for existing components.
134
+ - When adding new events, document trigger timing and payload fields.
135
+
136
+ ### Styling and Theming
137
+
138
+ - Reuse established design tokens and CSS variables before adding new ones.
139
+ - Keep light/dark compatibility working with `color-scheme` and current token strategy.
140
+ - Avoid ad-hoc hardcoded colors when semantic tokens already exist.
141
+ - Preserve current sizing, spacing, and radius rhythm unless intentionally refactoring system-wide.
142
+
143
+ ### Documentation and Demos
144
+
145
+ - Update `README.md` component docs when public API or behavior changes.
146
+ - Update demo pages (`index.html` and `propkit.html` where relevant) for visible behavior changes.
147
+ - Prefer realistic examples that mirror plugin/property panel usage.
148
+ - If introducing an experimental feature, document activation and fallback behavior clearly.
149
+
150
+ ### Compatibility and Safety
151
+
152
+ - Keep browser support expectations aligned with current README claims.
153
+ - Use progressive enhancement for bleeding-edge CSS features.
154
+ - Avoid regressions in existing attributes, defaults, and emitted events.
155
+
156
+ ### Color Picker Mode Extensibility
157
+
158
+ - Treat custom modes as a `fig-fill-picker` concern, not a standalone `fig-input-color` concern.
159
+ - When adding a new mode, update demos/docs with both:
160
+ - vanilla slot usage (`slot="mode-*"`)
161
+ - React `modeready` usage
162
+ - Do not emit `input` from programmatic attribute writes (`value` updates); preserve current loop-avoidance behavior for React.
163
+
164
+ ## Key Patterns
165
+
166
+ ```html
167
+ <!-- Modal/dialog content container -->
168
+ <dialog is="fig-dialog" drag="true" handle="fig-header">
169
+ <fig-header>
170
+ Dialog Title
171
+ <fig-button variant="ghost" icon close-dialog aria-label="Close dialog">
172
+ <span class="fig-mask-icon" style="--icon: var(--icon-close)"></span>
173
+ </fig-button>
174
+ </fig-header>
175
+ <div>Dialog body</div>
176
+ </dialog>
177
+
178
+ <!-- Anchored popup surface -->
179
+ <dialog is="fig-popup" anchor="#trigger" position="bottom left" offset="8 8">
180
+ <div>Popup content</div>
181
+ </dialog>
182
+ ```
183
+
184
+ ```js
185
+ // Event contract pattern: continuous + committed updates.
186
+ this.dispatchEvent(new CustomEvent("input", { detail, bubbles: true }));
187
+ this.dispatchEvent(new CustomEvent("change", { detail, bubbles: true }));
188
+
189
+ // Attribute-driven updates.
190
+ static get observedAttributes() { return ["value", "disabled"]; }
191
+ attributeChangedCallback(name, oldValue, newValue) {
192
+ if (oldValue === newValue) return;
193
+ // sync internal UI state
194
+ }
195
+ ```
196
+
197
+ ```txt
198
+ Event contract quick map:
199
+ - fig-slider: input/change -> current value on e.target.value
200
+ - fig-input-color: input/change -> value on e.target.value, structured color via e.detail (when available)
201
+ - fig-input-fill / fig-fill-picker: input/change -> fill payload in e.detail
202
+ ```
203
+
204
+ ```html
205
+ <!-- Typical field composition -->
206
+ <fig-field direction="horizontal">
207
+ <label>Opacity</label>
208
+ <fig-slider value="75" min="0" max="100" text="true" units="%"></fig-slider>
209
+ </fig-field>
210
+ ```
211
+
212
+ ## `fig-popup` vs `fig-dialog`
213
+
214
+ - **Use `fig-dialog` when the UI is a dialog.**
215
+ - Best for modal or primary task flows.
216
+ - Works well with explicit dialog structure and close policies.
217
+ - **Use `fig-popup` when you need low-level floating control.**
218
+ - Best for anchored contextual surfaces and advanced positioning behavior.
219
+ - Prefer this when you need explicit anchor/position/offset/viewport tuning.
220
+
221
+ Rule of thumb: `fig-dialog` = dialog UX, `fig-popup` = popup primitive.
222
+
223
+ ## Workflow
224
+
225
+ 1. **Read existing implementation first.** Check `fig.js`, `components.css`, and related demo usage before editing.
226
+ 2. **Confirm API surface impact.** Identify affected attributes, events, and slots.
227
+ 3. **Implement with compatibility in mind.** Preserve defaults and old usage unless explicitly changed.
228
+ 4. **Update docs/demo in same pass.** Keep examples and behavior synchronized.
229
+ 5. **Run project checks.** Use `bun dev` for interactive verification and `bun build` for output sanity.
230
+ 6. **Verify accessibility and theming.** Check keyboard flow, labels, disabled states, and both light/dark appearance.
231
+
232
+ ## Release-Ready Checklist
233
+
234
+ - Validate in a production build (`bun build`) and confirm custom elements are registered at runtime.
235
+ - Verify `input` vs `change` behavior for touched controls in both vanilla usage and React integration.
236
+ - Verify light/dark themes and keyboard navigation for any changed component.
237
+ - Verify overlay behavior (`fig-dialog`, `fig-popup`) including close/dismiss and drag behavior when applicable.
238
+ - Update `README.md`, demos, and `CHANGELOG.md` for any public API or behavior change.
239
+
240
+ ## Quick Reference
241
+
242
+ ```bash
243
+ # Start docs/demo server
244
+ bun dev
245
+
246
+ # Build distributable files
247
+ bun build
248
+ ```
249
+
250
+ ## Primary Files
251
+
252
+ - `fig.js` - component implementations and behavior
253
+ - `components.css` - component-level styling and states
254
+ - `base.css` - foundational styles and variables
255
+ - `index.html` - main interactive docs/demo
256
+ - `README.md` - public API and usage documentation
257
+ - `CHANGELOG.md` - release history and migration notes
@@ -0,0 +1,224 @@
1
+ ---
2
+ name: propkit
3
+ description: Guides creation and refinement of Figma-style property panel patterns ("PropKit") using FigUI3 components. Applies when building or modifying property fields in `propkit.html`, generating consistent field prompts, composing horizontal `fig-field` rows, or tuning panel UX for controls like image, color, fill, slider, switch, dropdown, segmented control, easing, and angle.
4
+ user-invocable: false
5
+ ---
6
+
7
+ # PropKit
8
+
9
+ Patterns for composing clean, production-ready Figma property panels with FigUI3.
10
+
11
+ > IMPORTANT: Favor composition and consistency over custom one-off controls. Build panels from existing `fig-*` elements first.
12
+
13
+ ## Current Project Context
14
+
15
+ ```json
16
+ !`node -e "const fs=require('fs'); const ok=fs.existsSync('propkit.html'); console.log(JSON.stringify({propkit:ok, example:'horizontal fig-field + label + fig-* control'},null,2))" 2>/dev/null || echo '{"error":"context unavailable"}'`
17
+ ```
18
+
19
+ ## Principles
20
+
21
+ 1. **Use horizontal property rows by default.** PropKit fields are primarily `fig-field direction="horizontal"`.
22
+ 2. **One clear label per control.** Keep labels concise and aligned with Figma property language.
23
+ 3. **Prefer native FigUI3 controls.** Use `fig-input-fill`, `fig-slider`, `fig-dropdown`, `fig-switch`, etc.
24
+ 4. **Use realistic panel widths and spacing.** Match the property panel feel (`~240px` panel blocks in demos).
25
+ 5. **Keep prompts and examples deterministic.** Prompt text should describe exact structure and key attributes.
26
+
27
+ ## React + Vite PropKit Usage
28
+
29
+ ### Include FigUI3 in React projects
30
+
31
+ - Import once in app bootstrap:
32
+ - `import "@rogieking/figui3/fig.css";`
33
+ - `await import("@rogieking/figui3/fig.js");`
34
+ - Register components before first React render to avoid undefined custom elements.
35
+ - Keep this setup in entry files (`main.tsx` / `main.jsx`), not scattered across feature components.
36
+
37
+ ### Vite setup and tree-shaking behavior
38
+
39
+ - Base Vite React config is sufficient in most cases:
40
+
41
+ ```ts
42
+ import { defineConfig } from "vite";
43
+ import react from "@vitejs/plugin-react";
44
+
45
+ export default defineConfig({
46
+ plugins: [react()],
47
+ });
48
+ ```
49
+
50
+ - In production, FigUI3 side-effect registration can be tree-shaken if only imported for side effects.
51
+ - Preferred pattern (from `webgpu-effects`) is explicit async bootstrap:
52
+
53
+ ```tsx
54
+ import "@rogieking/figui3/fig.css";
55
+
56
+ const bootstrap = async () => {
57
+ await import("@rogieking/figui3/fig.js");
58
+ createRoot(document.getElementById("app")!).render(<App />);
59
+ };
60
+
61
+ bootstrap();
62
+ ```
63
+
64
+ ### React composition conventions for PropKit rows
65
+
66
+ - Continue using canonical row shape in JSX:
67
+ - `<fig-field direction="horizontal">` + `<label>` + one primary `fig-*` control.
68
+ - For customized built-ins in React (`<dialog is="fig-popup">` / `<dialog is="fig-dialog">`), use `class`, not `className`.
69
+ - Use refs and native event listeners (`input`, `change`) for reliable control updates.
70
+
71
+ ## Critical Rules
72
+
73
+ ### Field Composition
74
+
75
+ - Default pattern: label + single primary control inside one horizontal `fig-field`.
76
+ - Keep control-specific options on the component itself (not hidden wrapper logic).
77
+ - Use `full` where property controls should stretch within row constraints.
78
+ - Avoid mixing unrelated controls in a single field row unless intentionally grouped.
79
+
80
+ ### Prompt Generation Style
81
+
82
+ - Write prompts as imperative build instructions.
83
+ - Include field direction, control tag, and meaningful attrs.
84
+ - Prefer short explicit phrasing over vague prose.
85
+ - Keep wording consistent:
86
+ - `Use a horizontal fig-field...`
87
+ - `With a label of ...`
88
+ - Include concrete defaults when relevant (value, min/max, step, units, mode, variant) so generated fields are deterministic.
89
+ - Avoid placeholder-only prompts for numeric controls; always specify range semantics.
90
+
91
+ ### Control Guidance
92
+
93
+ - **Image:** prefer `fig-image` with `upload`, `fit`, and `aspect-ratio` where needed.
94
+ - **Color:** use `fig-input-color` with `text="true"` and optional `alpha`.
95
+ - **Fill:** use `fig-input-fill` for multi-mode fills; keep value JSON valid.
96
+ - **Slider:** choose proper type (`range`, `opacity`, `hue`, `stepper`, `delta`) and include units/transform intentionally.
97
+ - **Dropdown:** use `fig-dropdown`; include sensible default options.
98
+ - **Boolean:** use `fig-switch`; avoid using dropdowns for true/false.
99
+ - **Discrete choices:** use `fig-segmented-control` + `fig-segment`.
100
+ - **Motion easing:** use `fig-easing-curve` with/without presets depending on context.
101
+ - **Angle:** use `fig-input-angle` with `text="true"` for precision workflows.
102
+
103
+ ### Slider Types and Variants
104
+
105
+ - Default to `type="range"` for generic numeric properties (opacity %, size, spacing, intensity).
106
+ - Use `type="opacity"` when color context is needed (set `color` and usually `units="%"`).
107
+ - Use `type="hue"` only for hue selection workflows.
108
+ - Use `type="stepper"` for discrete snap points (include a `datalist` with valid stops).
109
+ - Use `type="delta"` for offset/relative adjustments around a neutral point (typically include `default`, and often symmetric min/max).
110
+ - Prefer `text="true"` for precision-critical properties; omit it for compact/simplified rows.
111
+ - Use `transform` when internal value scale differs from UI display (example: internal `0..1`, display `0..100%`).
112
+ - Variants:
113
+ - Default variant for most property panels.
114
+ - `variant="minimal"` for visually quieter contexts.
115
+ - `variant="neue"` only where explicitly requested for that panel's style.
116
+ - Always set explicit `min`, `max`, and `step` (and `units` where applicable) to keep behavior predictable.
117
+
118
+ ### Control Selection Heuristics
119
+
120
+ - Use `fig-slider` for scrub-friendly continuous values (opacity, intensity, scale, blur amount).
121
+ - Use `fig-input-number` for precise direct entry (sizes, coordinates, exact typed values).
122
+ - Use slider + text (`text="true"`) when users need both quick scrubbing and precise adjustment.
123
+ - Use `fig-segmented-control` for small discrete sets (2-5 fixed options).
124
+ - Use `fig-dropdown` for larger or less frequently switched option sets.
125
+ - Use `fig-switch` for binary state, never slider/dropdown for pure on/off.
126
+
127
+ ### UX Consistency
128
+
129
+ - Keep panel patterns visually consistent across sections.
130
+ - Preserve theme behavior (light/dark) and avoid non-token color overrides.
131
+ - Ensure labels and controls remain keyboard and screen-reader usable.
132
+
133
+ ## Key Patterns
134
+
135
+ ```html
136
+ <!-- Canonical PropKit row -->
137
+ <fig-field direction="horizontal">
138
+ <label>Opacity</label>
139
+ <fig-slider value="75" min="0" max="100" text="true" units="%" full></fig-slider>
140
+ </fig-field>
141
+ ```
142
+
143
+ ```html
144
+ <!-- Non-horizontal (stacked/default column) field -->
145
+ <fig-field>
146
+ <label>Opacity</label>
147
+ <fig-slider value="75" min="0" max="100" text="true" units="%"></fig-slider>
148
+ </fig-field>
149
+ ```
150
+
151
+ ```html
152
+ <!-- Fill + blend pair -->
153
+ <fig-field direction="horizontal">
154
+ <label>Fill</label>
155
+ <fig-input-fill value='{"type":"solid","color":"#667eea"}' experimental="modern"></fig-input-fill>
156
+ </fig-field>
157
+ <fig-field direction="horizontal">
158
+ <label>Blend</label>
159
+ <fig-dropdown full experimental="modern">
160
+ <option selected>Normal</option>
161
+ <option>Multiply</option>
162
+ </fig-dropdown>
163
+ </fig-field>
164
+ ```
165
+
166
+ ```txt
167
+ Prompt pattern:
168
+ Use a horizontal fig-field, with a fig-slider, min=0 max=100 text=true units=%. With a label of Opacity.
169
+ ```
170
+
171
+ ```html
172
+ <!-- Slider type/variant examples -->
173
+ <fig-field direction="horizontal">
174
+ <label>Opacity</label>
175
+ <fig-slider type="opacity" value="0.75" color="#0D99FF" units="%" text="true" full></fig-slider>
176
+ </fig-field>
177
+ <fig-field direction="horizontal">
178
+ <label>Hue</label>
179
+ <fig-slider type="hue" value="180" text="true" variant="minimal" full></fig-slider>
180
+ </fig-field>
181
+ <fig-field direction="horizontal">
182
+ <label>Offset</label>
183
+ <fig-slider type="delta" value="0" default="0" min="-5" max="5" step="0.25" text="true" full></fig-slider>
184
+ </fig-field>
185
+ ```
186
+
187
+ ## Workflow
188
+
189
+ 1. **Identify property intent.** Determine if control is boolean, discrete choice, continuous numeric, color/fill, media, or motion.
190
+ 2. **Pick the canonical FigUI3 control.** Avoid custom alternatives unless required.
191
+ 3. **Compose row structure.** Use horizontal `fig-field`, then label + control.
192
+ 4. **Set defaults and attrs explicitly.** Include values/ranges/units so behavior is deterministic.
193
+ 5. **Verify panel consistency.** Check row spacing, width, and theme parity against existing PropKit sections.
194
+ 6. **Validate events and interactions.** Ensure controls emit usable `input`/`change` and behave well in keyboard workflows.
195
+
196
+ ## Delivery Checklist
197
+
198
+ - Confirm prompts include all behavior-critical attrs (`value`, `min`, `max`, `step`, `units`, `type`, `variant` as needed).
199
+ - Confirm control choice matches intent (continuous vs discrete vs boolean vs exact numeric entry).
200
+ - Verify row density and panel width feel consistent with existing PropKit sections.
201
+ - Verify keyboard navigation and label association for every field row.
202
+ - Verify changes in `propkit.html` still mirror recommended patterns in this skill.
203
+
204
+ ## Quick Reference
205
+
206
+ ```txt
207
+ Common PropKit controls:
208
+ - fig-image
209
+ - fig-input-color
210
+ - fig-input-fill
211
+ - fig-slider
212
+ - fig-switch
213
+ - fig-dropdown
214
+ - fig-segmented-control
215
+ - fig-easing-curve
216
+ - fig-input-angle
217
+ ```
218
+
219
+ ## Primary Files
220
+
221
+ - `propkit.html` - canonical PropKit examples and prompt-copy behavior
222
+ - `fig.js` - control behavior and emitted events
223
+ - `components.css` - visual treatment and layout constraints
224
+ - `README.md` - component API details and usage
package/components.css CHANGED
@@ -1447,7 +1447,7 @@ fig-3d-rotate {
1447
1447
  }
1448
1448
 
1449
1449
  > fig-input-number {
1450
- flex: 1 0 4rem;
1450
+ flex: 1 0 3rem;
1451
1451
  }
1452
1452
 
1453
1453
  .fig-3d-rotate-container {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rogieking/figui3",
3
- "version": "2.29.0",
3
+ "version": "2.29.2",
4
4
  "description": "A lightweight web components library for building Figma plugin and widget UIs with native look and feel",
5
5
  "author": "Rogie King",
6
6
  "license": "MIT",
@@ -12,7 +12,8 @@
12
12
  "./fig.js": "./fig.js",
13
13
  "./fig.css": "./fig.css",
14
14
  "./base.css": "./base.css",
15
- "./components.css": "./components.css"
15
+ "./components.css": "./components.css",
16
+ "./propkit.html": "./propkit.html"
16
17
  },
17
18
  "files": [
18
19
  "fig.js",
@@ -20,7 +21,9 @@
20
21
  "base.css",
21
22
  "components.css",
22
23
  "index.html",
24
+ "propkit.html",
23
25
  "dist/",
26
+ ".cursor/skills/",
24
27
  "README.md",
25
28
  "LICENSE"
26
29
  ],