@umbra.ui/core 0.4.6 → 0.5.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 (74) hide show
  1. package/dist/components/inputs/InputCard/InputCard.vue +46 -9
  2. package/dist/components/inputs/InputCryptoAddress/InputCryptoAddress.vue +23 -4
  3. package/dist/components/inputs/InputEmail/InputEmail.vue +14 -7
  4. package/dist/components/inputs/InputNumber/InputNumber.vue +36 -3
  5. package/dist/components/inputs/InputPhone/InputPhone.vue +36 -3
  6. package/dist/components/inputs/InputSecure/InputSecure.vue +27 -3
  7. package/dist/components/pickers/CollectionPicker/CollectionPicker.vue +31 -9
  8. package/dist/components/pickers/CollectionPicker/README.md +50 -0
  9. package/dist/components/pickers/ColorPicker/ColorPicker.vue +27 -4
  10. package/dist/components/pickers/ColorPicker/README.md +50 -0
  11. package/dist/components/pickers/IconPicker/IconPicker.vue +53 -26
  12. package/dist/components/pickers/IconPicker/README.md +43 -0
  13. package/package.json +5 -4
  14. package/src/components/inputs/InputCard/InputCard.vue +46 -9
  15. package/src/components/inputs/InputCryptoAddress/InputCryptoAddress.vue +23 -4
  16. package/src/components/inputs/InputEmail/InputEmail.vue +14 -7
  17. package/src/components/inputs/InputNumber/InputNumber.vue +36 -3
  18. package/src/components/inputs/InputPhone/InputPhone.vue +36 -3
  19. package/src/components/inputs/InputSecure/InputSecure.vue +27 -3
  20. package/src/components/pickers/CollectionPicker/CollectionPicker.vue +31 -9
  21. package/src/components/pickers/CollectionPicker/README.md +50 -0
  22. package/src/components/pickers/ColorPicker/ColorPicker.vue +27 -4
  23. package/src/components/pickers/ColorPicker/README.md +50 -0
  24. package/src/components/pickers/IconPicker/IconPicker.vue +53 -26
  25. package/src/components/pickers/IconPicker/README.md +43 -0
  26. package/src/skills/README.md +108 -0
  27. package/src/skills/umbra.ui-colors-application/SKILL.md +102 -0
  28. package/src/skills/umbra.ui-colors-application/reference.md +178 -0
  29. package/src/skills/umbra.ui-control-button/SKILL.md +34 -0
  30. package/src/skills/umbra.ui-control-checkbox/SKILL.md +34 -0
  31. package/src/skills/umbra.ui-control-dropdown/SKILL.md +34 -0
  32. package/src/skills/umbra.ui-control-icon-button/SKILL.md +33 -0
  33. package/src/skills/umbra.ui-control-inline-dropdown/SKILL.md +32 -0
  34. package/src/skills/umbra.ui-control-radio/SKILL.md +33 -0
  35. package/src/skills/umbra.ui-control-range-slider/SKILL.md +33 -0
  36. package/src/skills/umbra.ui-control-segmented-control/SKILL.md +33 -0
  37. package/src/skills/umbra.ui-control-slider/SKILL.md +33 -0
  38. package/src/skills/umbra.ui-control-stepper/SKILL.md +33 -0
  39. package/src/skills/umbra.ui-control-switch/SKILL.md +33 -0
  40. package/src/skills/umbra.ui-dialog-alert/SKILL.md +34 -0
  41. package/src/skills/umbra.ui-dialog-toast/SKILL.md +35 -0
  42. package/src/skills/umbra.ui-indicator-progress-bar/SKILL.md +33 -0
  43. package/src/skills/umbra.ui-indicator-tooltip/SKILL.md +33 -0
  44. package/src/skills/umbra.ui-input-card/SKILL.md +42 -0
  45. package/src/skills/umbra.ui-input-card/reference.md +36 -0
  46. package/src/skills/umbra.ui-input-crypto-address/SKILL.md +40 -0
  47. package/src/skills/umbra.ui-input-crypto-address/reference.md +40 -0
  48. package/src/skills/umbra.ui-input-email/SKILL.md +45 -0
  49. package/src/skills/umbra.ui-input-number/SKILL.md +39 -0
  50. package/src/skills/umbra.ui-input-otp/SKILL.md +44 -0
  51. package/src/skills/umbra.ui-input-phone/SKILL.md +45 -0
  52. package/src/skills/umbra.ui-input-phone/reference.md +35 -0
  53. package/src/skills/umbra.ui-input-search/SKILL.md +43 -0
  54. package/src/skills/umbra.ui-input-search/reference.md +45 -0
  55. package/src/skills/umbra.ui-input-secure/SKILL.md +43 -0
  56. package/src/skills/umbra.ui-input-secure/reference.md +44 -0
  57. package/src/skills/umbra.ui-input-string-capture/SKILL.md +41 -0
  58. package/src/skills/umbra.ui-input-tags/SKILL.md +46 -0
  59. package/src/skills/umbra.ui-input-tags/reference.md +44 -0
  60. package/src/skills/umbra.ui-input-text/SKILL.md +46 -0
  61. package/src/skills/umbra.ui-menu-action-menu/SKILL.md +34 -0
  62. package/src/skills/umbra.ui-model-popover/SKILL.md +35 -0
  63. package/src/skills/umbra.ui-model-sheet/SKILL.md +35 -0
  64. package/src/skills/umbra.ui-model-sidebar/SKILL.md +35 -0
  65. package/src/skills/umbra.ui-picker-collection/SKILL.md +36 -0
  66. package/src/skills/umbra.ui-picker-collection/reference.md +34 -0
  67. package/src/skills/umbra.ui-picker-color/SKILL.md +36 -0
  68. package/src/skills/umbra.ui-picker-color/reference.md +34 -0
  69. package/src/skills/umbra.ui-picker-date/SKILL.md +36 -0
  70. package/src/skills/umbra.ui-picker-date/reference.md +26 -0
  71. package/src/skills/umbra.ui-picker-file/SKILL.md +42 -0
  72. package/src/skills/umbra.ui-picker-file/reference.md +39 -0
  73. package/src/skills/umbra.ui-picker-icon/SKILL.md +36 -0
  74. package/src/skills/umbra.ui-picker-icon/reference.md +28 -0
@@ -0,0 +1,43 @@
1
+ # Umbra Skill: Search Overlay
2
+
3
+ Use this skill for global/local search overlays built with `SearchOverlay` and `SearchResultCell`.
4
+
5
+ ## When To Use
6
+ - You need a keyboard-driven searchable overlay UI.
7
+ - You need paged results with optional "load more".
8
+ - You need customizable result rendering with path segments.
9
+
10
+ ## Required Context Checklist
11
+ - Open/close control state and trigger mechanism.
12
+ - Query state, results state, and active index state.
13
+ - Search provider contract (search, recent, select, pagination).
14
+ - Selection behavior (navigate, focus item, open detail, etc.).
15
+ - Slot customization vs default result cell usage.
16
+
17
+ ## Ask Developer If Missing
18
+ - "What data provider should back search and recent results?"
19
+ - "What should happen when a result is selected?"
20
+ - "Do we need custom result rendering, or default `SearchResultCell`?"
21
+ - "How should pagination/load-more work?"
22
+
23
+ ## Implementation Recipe
24
+ 1. Import `SearchOverlay` and optionally `SearchResultCell`.
25
+ 2. Manage state:
26
+ - `isOpen`, `query`, `results`, `activeIndex`, `canLoadMore`
27
+ 3. Render `SearchOverlay` with two-way updates:
28
+ - `@update:model-value`
29
+ - `@update:query`
30
+ - `@update:active-index`
31
+ 4. Wire `@select` and `@load-more`.
32
+ 5. Optionally use `#result` slot with `SearchResultCell`.
33
+
34
+ ## Validation And Edge Cases
35
+ - Keyboard nav (up/down/enter/escape) works.
36
+ - Active index resets safely when result set changes.
37
+ - Load-more appends without scroll glitches.
38
+ - Empty states and recent-results mode render correctly.
39
+
40
+ ## Definition Of Done
41
+ - Overlay opens/closes and query updates correctly.
42
+ - Results render and select behavior is correct.
43
+ - Provider and pagination integration is stable.
@@ -0,0 +1,45 @@
1
+ # Reference: Search Input Family
2
+
3
+ Source of truth:
4
+ - `packages/core/src/components/inputs/search/README.md`
5
+ - `packages/core/src/components/inputs/search/types.ts`
6
+
7
+ ## Components In Scope
8
+ - `SearchOverlay`
9
+ - `SearchResultCell`
10
+
11
+ ## Core Types
12
+ - `SearchPathSegment`:
13
+ - `id`, `type`, `title`
14
+ - `SearchOverlayResult`:
15
+ - `id`, `path`, `pathSegments`, `title`, `excerpt`
16
+ - `SearchProvider<T>`:
17
+ - `search(query, { limit, offset })`
18
+ - `getRecent()`
19
+ - `select(item)`
20
+
21
+ ## SearchOverlay Contract
22
+ Key props:
23
+ - `modelValue`, `query`, `results`, `activeIndex`
24
+ - `showRecent`, `searchLabel`, `resultsLabel`
25
+ - `placeholder`, empty labels
26
+ - `canLoadMore`
27
+
28
+ Key events:
29
+ - `update:modelValue`
30
+ - `update:query`
31
+ - `update:activeIndex`
32
+ - `select`
33
+ - `load-more`
34
+
35
+ ## Integration Pitfalls
36
+ - Keep provider operations async-safe and race-safe for rapid typing.
37
+ - Reset `activeIndex` when result set changes.
38
+ - Ensure selecting a row and segment-click navigation do not conflict.
39
+ - "Recent" and "results" empty states should be explicitly handled.
40
+
41
+ ## Agent Verification Checklist
42
+ - Overlay opens/closes and focus behavior is correct.
43
+ - Keyboard selection and enter-to-select work.
44
+ - Load-more appends and preserves interaction state.
45
+ - Slot rendering with `SearchResultCell` shows highlighted/segmented paths correctly.
@@ -0,0 +1,43 @@
1
+ # Umbra Skill: InputSecure
2
+
3
+ Use this skill for password flows that need requirement checks, strength UI, and optional generation/copy controls.
4
+
5
+ ## When To Use
6
+ - You need secure password entry with configurable policy requirements.
7
+ - You need strength feedback and validation events.
8
+ - You need optional generate/copy behavior in create flows.
9
+
10
+ ## Required Context Checklist
11
+ - Usage mode (`create`, `confirm`, `enter`).
12
+ - Password policy requirements (min length, charset requirements, common-password rule).
13
+ - Whether to show strength and requirements panels.
14
+ - Whether generate/copy controls are allowed.
15
+ - Parent submit behavior based on `update:valid`.
16
+
17
+ ## Ask Developer If Missing
18
+ - "Which usage mode should this field use (`create`, `confirm`, `enter`)?"
19
+ - "What password policy is required (length, uppercase, numbers, special chars)?"
20
+ - "Should generate/copy controls be shown?"
21
+ - "Should we block submit unless `update:valid` is true?"
22
+
23
+ ## Implementation Recipe
24
+ 1. Import `InputSecure`.
25
+ 2. Bind:
26
+ - `v-model:value="password"`
27
+ - `@update:valid="passwordValid = $event"`
28
+ - optional `@update:strength="strength = $event"`
29
+ 3. Configure policy props per product requirements.
30
+ 4. Use parent submit guard with `passwordValid`.
31
+ 5. Keep parent business errors explicit via `state='error'`.
32
+
33
+ ## Validation And Edge Cases
34
+ - Internal invalid error is blur-gated and hidden while focused editing.
35
+ - Requirements panel should support focused editing without noisy error state.
36
+ - Confirm/enter usage modes should suppress irrelevant UI elements.
37
+ - Readonly/disabled must prevent interaction with action buttons.
38
+
39
+ ## Definition Of Done
40
+ - Policy requirements match spec.
41
+ - `update:valid` and `update:strength` drive parent UX as expected.
42
+ - Blur-only internal error behavior is correct.
43
+ - Generate/copy controls behave per mode and permissions.
@@ -0,0 +1,44 @@
1
+ # Reference: InputSecure
2
+
3
+ Source of truth:
4
+ - `packages/core/src/components/inputs/InputSecure/InputSecure.vue`
5
+ - `packages/core/src/components/inputs/InputSecure/README.md`
6
+
7
+ ## Public Props
8
+ - `usage: "create" | "confirm" | "enter"`
9
+ - `value?: string`
10
+ - `placeholder?: string`
11
+ - `showStrength?: boolean`
12
+ - `allowGenerate?: boolean`
13
+ - `allowCopy?: boolean`
14
+ - `showRequirements?: boolean`
15
+ - `minLength?: number`
16
+ - `requireUppercase?: boolean`
17
+ - `requireLowercase?: boolean`
18
+ - `requireNumbers?: boolean`
19
+ - `requireSpecialChars?: boolean`
20
+ - `preventCommon?: boolean`
21
+ - `state?: "normal" | "active" | "disabled" | "readonly" | "error"`
22
+ - `validate?: (value: string) => boolean | { valid: boolean; message?: string }`
23
+
24
+ ## Emitted Events
25
+ - `update:value` -> password string
26
+ - `update:valid` -> boolean
27
+ - `update:strength` -> 0..4
28
+
29
+ ## Validation/Behavior Notes
30
+ - Uses custom `validate` when provided; otherwise requirement-based validity.
31
+ - Internal invalid visual state is blur-gated (`hasBlurred` + `!isFocused`).
32
+ - Requirements panel is shown during focus and/or post-blur invalid state.
33
+ - Parent `state="error"` remains immediate.
34
+
35
+ ## Integration Pitfalls
36
+ - `usage` changes visible controls; do not assume generate/copy always present.
37
+ - If you use custom `validate`, verify requirement UI messaging still matches product expectations.
38
+ - Avoid duplicating strength logic externally unless needed for analytics.
39
+
40
+ ## Agent Verification Checklist
41
+ - Focus invalid password -> no internal error container.
42
+ - Blur invalid password -> internal error/requirements state visible.
43
+ - Focus again -> internal error visuals hide while editing.
44
+ - `update:valid` and `update:strength` emit as password changes.
@@ -0,0 +1,41 @@
1
+ # Umbra Skill: StringCapture
2
+
3
+ Use this skill for trigger-driven popover text entry using Umbra `StringCapture`.
4
+
5
+ ## When To Use
6
+ - You need "click to edit/add text" popover capture UX.
7
+ - You need compact inline editing without routing to separate forms.
8
+ - You need explicit submit/cancel events for controlled state updates.
9
+
10
+ ## Required Context Checklist
11
+ - Trigger element and placement in DOM.
12
+ - Bound value and update contract.
13
+ - Header/placeholder copy and validation rules.
14
+ - Submit/cancel side effects.
15
+ - Loading behavior for async submit.
16
+
17
+ ## Ask Developer If Missing
18
+ - "What element should trigger the capture popover?"
19
+ - "Should value update only on submit, or live during typing?"
20
+ - "What should happen on cancel (revert, keep draft, close only)?"
21
+ - "Do we show loading state during async save?"
22
+
23
+ ## Implementation Recipe
24
+ 1. Import `StringCapture`.
25
+ 2. Bind `v-model` to string state.
26
+ 3. Provide trigger content via default slot.
27
+ 4. Handle:
28
+ - `@submit` for confirm
29
+ - `@cancel` for dismiss
30
+ 5. Use `loading` prop if save is async.
31
+
32
+ ## Validation And Edge Cases
33
+ - Enter should submit, Escape should cancel.
34
+ - Overlay click should dismiss safely.
35
+ - Focus should move to input when opened.
36
+ - Empty-submit behavior should match product requirement.
37
+
38
+ ## Definition Of Done
39
+ - Trigger opens capture popover in expected location.
40
+ - Submit/cancel lifecycle updates state correctly.
41
+ - Keyboard and overlay interactions behave predictably.
@@ -0,0 +1,46 @@
1
+ # Umbra Skill: Tags
2
+
3
+ Use this skill for tag selection/creation flows using `TagBar`, `TagPicker`, and `TagCreation`.
4
+
5
+ ## When To Use
6
+ - Users need multi-tag selection with search/filtering.
7
+ - Users may create new tags inline.
8
+ - Tags need custom visual styles or color schemes.
9
+
10
+ ## Required Context Checklist
11
+ - Data model for available tags and selected tags.
12
+ - Creation rules (who can create, title uniqueness, default style).
13
+ - Overflow mode (`full`, `fixed`, `list`) expectations.
14
+ - Editing constraints (can remove/reorder?).
15
+ - Style requirements (plain tags vs styled tags).
16
+
17
+ ## Ask Developer If Missing
18
+ - "What is the source of truth for all tags and selected tags?"
19
+ - "Can users create new tags, and what naming rules apply?"
20
+ - "Which overflow mode should this surface use?"
21
+ - "Do tags need custom styles/colors, and where should style config come from?"
22
+
23
+ ## Implementation Recipe
24
+ 1. Import `TagBar` and Tag types from `@umbra.ui/core`.
25
+ 2. Maintain:
26
+ - `allTags: TagItem[]`
27
+ - `selectedTags: TagItem[]`
28
+ - `query`, `matchIndex`
29
+ 3. Render `TagBar` with:
30
+ - `:all-tags`, `:selected-tags`
31
+ - `v-model:query`, `v-model:match-index`
32
+ - handlers for `tag-select`, `tag-remove`, `tag-create`.
33
+ 4. If style is required, use `createStyledTag` and/or `TagStyleConfig`.
34
+ 5. Persist selected tags and created tags to parent/domain store.
35
+
36
+ ## Validation And Edge Cases
37
+ - Prevent duplicate selected tags.
38
+ - Handle empty query and no-result states.
39
+ - Verify keyboard navigation in picker.
40
+ - Verify behavior across overflow modes.
41
+ - Ensure styled tags render legibly in light/dark themes.
42
+
43
+ ## Definition Of Done
44
+ - Users can select/remove/create tags according to rules.
45
+ - Query and highlight state are stable.
46
+ - Styling and overflow behavior match product surface requirements.
@@ -0,0 +1,44 @@
1
+ # Reference: Tags Input Family
2
+
3
+ Source of truth:
4
+ - `packages/core/src/components/inputs/Tags/README.md`
5
+ - `packages/core/src/components/inputs/Tags/types.ts`
6
+
7
+ ## Components In Scope
8
+ - `TagBar`
9
+ - `TagPicker`
10
+ - `TagCreation`
11
+
12
+ ## Core Interfaces
13
+ - `TagItem`:
14
+ - `id: string`
15
+ - `title: string`
16
+ - `style?: TagStyleConfig`
17
+ - `TagStyleConfig`: direct CSS-style config + optional `hover`, optional `size`, optional `colorScheme`.
18
+
19
+ ## TagBar Contract
20
+ Key props:
21
+ - `allTags`, `selectedTags`, `query`, `matchIndex`
22
+ - `placeholder`
23
+ - `overflow: "full" | "fixed" | "list"`
24
+ - `allowEditing`
25
+
26
+ Key events:
27
+ - `update:query`
28
+ - `update:matchIndex`
29
+ - `tag-select`
30
+ - `tag-remove`
31
+ - `tag-create`
32
+ - `tag-reorder`
33
+
34
+ ## Integration Pitfalls
35
+ - Keep `allTags` and `selectedTags` as parent-controlled source of truth.
36
+ - Prevent duplicate insertion in `selectedTags`.
37
+ - `tag-create` should apply title normalization/validation before persistence.
38
+ - Styled tag readability must be tested in light/dark modes.
39
+
40
+ ## Agent Verification Checklist
41
+ - Select/remove/create flows all function.
42
+ - Keyboard navigation in picker works.
43
+ - Overflow mode behaves as intended for container size.
44
+ - Reorder events are handled (if enabled) and persisted.
@@ -0,0 +1,46 @@
1
+ # Umbra Skill: InputText
2
+
3
+ Use this skill when implementing or updating plain text capture with Umbra `InputText`.
4
+
5
+ ## When To Use
6
+ - You need a basic text field with Umbra theming.
7
+ - You need explicit visual state control via `state` (`normal`, `active`, `disabled`, `readonly`, `error`).
8
+ - You need direct `v-model:value` binding with simple string updates.
9
+
10
+ ## Do Not Use
11
+ - For email validation/suggestions: use `InputEmail`.
12
+ - For numeric/range behavior: use `InputNumber`.
13
+ - For masked formats (phone, card, crypto): use specialized inputs.
14
+
15
+ ## Required Context Checklist
16
+ - Target file and exact DOM location where input should be inserted.
17
+ - Data binding variable name/type (`ref<string>`).
18
+ - Desired `state` and `size` behavior.
19
+ - Whether parent/business logic controls `state="error"`.
20
+ - Label/help/error copy requirements.
21
+
22
+ ## Ask Developer If Missing
23
+ - "What exact model ref should this input bind to (`v-model:value`)?"
24
+ - "Should this input be `normal`, `active`, `readonly`, `disabled`, or parent-driven `error`?"
25
+ - "Where in the DOM should it mount (component/section selector)?"
26
+ - "Do you want external validation to drive `state='error'`, and what message should appear nearby?"
27
+
28
+ ## Implementation Recipe
29
+ 1. Import `InputText` from `@umbra.ui/core`.
30
+ 2. Create `const value = ref(\"\")` in `<script setup lang=\"ts\">`.
31
+ 3. Render:
32
+ - `<InputText v-model:value="value" :state="..." :size="..." placeholder="..." />`
33
+ 4. If external validation is required, keep validation in parent and only pass `state="error"` when invalid.
34
+ 5. Do not embed heavy validation logic inside this component usage.
35
+
36
+ ## Validation And Edge Cases
37
+ - Confirm `update:value` emits on each input change.
38
+ - Confirm `readonly` and `disabled` behavior stays non-editable.
39
+ - Confirm `state='error'` is parent-controlled and immediate.
40
+ - Confirm placeholder and filled states match expected design.
41
+
42
+ ## Definition Of Done
43
+ - Input renders in correct location.
44
+ - `v-model:value` updates expected state variable.
45
+ - Requested state and size variants work.
46
+ - Parent-driven error handling (if requested) is wired and visible.
@@ -0,0 +1,34 @@
1
+ # Umbra Skill: ActionMenu
2
+
3
+ Use this skill for contextual action lists using Umbra `ActionMenu`.
4
+
5
+ ## When To Use
6
+ - Overflow actions (`...`) on cards/rows.
7
+ - Right-click context menus (`contextMenu=true`).
8
+ - Action lists containing normal and destructive operations.
9
+
10
+ ## Required Context Checklist
11
+ - Menu open-state control (`modelValue`).
12
+ - `items: ActionMenuItem[]` with title/icon/action definitions.
13
+ - Trigger mode (click menu vs context menu).
14
+ - Close behavior after action and analytics expectations.
15
+
16
+ ## Ask Developer If Missing
17
+ - "Should this be click-triggered or right-click context menu?"
18
+ - "What actions should appear, and which are destructive?"
19
+ - "Do item actions run directly or dispatch through store/router?"
20
+
21
+ ## Implementation Recipe
22
+ 1. Import `ActionMenu` and `ActionMenuItem`.
23
+ 2. Create typed `items` with `title`, `action`, optional `icon`, optional `isDestructive`.
24
+ 3. Bind `v-model` for open state.
25
+ 4. Provide trigger content in default slot.
26
+ 5. Handle `@item-click` for tracking and side effects.
27
+
28
+ ## Validation And Edge Cases
29
+ - Destructive items should be visually and behaviorally clear.
30
+ - Ensure right-click menus position correctly and close on outside click.
31
+ - Keep action handlers idempotent if users click rapidly.
32
+
33
+ ## Definition Of Done
34
+ - Menu actions are discoverable, correctly wired, and safe.
@@ -0,0 +1,35 @@
1
+ # Umbra Skill: Popover
2
+
3
+ Use this skill for anchored floating content using Umbra `Popover`.
4
+
5
+ ## When To Use
6
+ - Contextual help, menus, quick actions, lightweight forms.
7
+ - Content anchored to a trigger with smart placement.
8
+ - UX requiring click or hover trigger behavior.
9
+
10
+ ## Required Context Checklist
11
+ - Open state ownership (`modelValue`/`v-model`).
12
+ - Trigger type (`click` or `hover`) and delays.
13
+ - Placement, offset, arrow, and overlay requirements.
14
+ - Close behavior (`dismissOnClickOutside`, Escape handling).
15
+
16
+ ## Ask Developer If Missing
17
+ - "Should this open on click or hover?"
18
+ - "What placement should be preferred?"
19
+ - "Should outside click close it?"
20
+ - "Do we need backdrop overlay?"
21
+
22
+ ## Implementation Recipe
23
+ 1. Import `Popover`.
24
+ 2. Bind open state with `v-model`.
25
+ 3. Provide `#trigger` slot and default slot content.
26
+ 4. Configure placement and interaction props.
27
+ 5. Handle `open`/`close` events for analytics or side effects.
28
+
29
+ ## Validation And Edge Cases
30
+ - Ensure popover closes on intended interactions only.
31
+ - Verify viewport-aware placement in constrained containers.
32
+ - Confirm keyboard dismissal (Escape) works for accessibility.
33
+
34
+ ## Definition Of Done
35
+ - Popover opens, positions, and closes exactly as required.
@@ -0,0 +1,35 @@
1
+ # Umbra Skill: Sheet
2
+
3
+ Use this skill for modal sheet surfaces that slide/fade in from an edge.
4
+
5
+ ## When To Use
6
+ - Mobile-style action sheets, forms, detail panels, modal workflows.
7
+ - Temporary overlays needing strong focus and backdrop behavior.
8
+ - Bottom/top/left/right reveal interactions.
9
+
10
+ ## Required Context Checklist
11
+ - Controlled open state and dismissal rules.
12
+ - `side`, size constraints (`width`/`height`/max values).
13
+ - Animation style (`slide` vs `ghost`) and duration.
14
+ - Backdrop style (`blur` vs `dim`) and close behavior.
15
+
16
+ ## Ask Developer If Missing
17
+ - "Which side should the sheet enter from?"
18
+ - "Should backdrop click dismiss the sheet?"
19
+ - "Do we want slide or ghost animation?"
20
+ - "What size constraints should be enforced?"
21
+
22
+ ## Implementation Recipe
23
+ 1. Import `Sheet`.
24
+ 2. Bind `v-model` boolean for visibility.
25
+ 3. Configure side, size, animation, and backdrop props.
26
+ 4. Place workflow content in default slot.
27
+ 5. Handle `open`, `close`, and `backdrop-click` if needed.
28
+
29
+ ## Validation And Edge Cases
30
+ - Body scroll should lock while sheet is open.
31
+ - Escape/backdrop behavior should match product expectations.
32
+ - Validate on small screens with safe-area constraints.
33
+
34
+ ## Definition Of Done
35
+ - Sheet interaction feels modal, predictable, and responsive.
@@ -0,0 +1,35 @@
1
+ # Umbra Skill: Sidebar
2
+
3
+ Use this skill for slide-in navigation or utility panels with Umbra `Sidebar`.
4
+
5
+ ## When To Use
6
+ - App navigation drawers and settings panels.
7
+ - Contextual side panels that coexist with primary content.
8
+ - Mobile action panels entering from bottom/top.
9
+
10
+ ## Required Context Checklist
11
+ - Open state ownership and dismissal behavior.
12
+ - Side (`left`, `right`, `top`, `bottom`) and dimensions.
13
+ - Backdrop style and close policy.
14
+ - Panel content structure (navigation, settings, actions).
15
+
16
+ ## Ask Developer If Missing
17
+ - "Is this navigation, settings, or contextual tools?"
18
+ - "Which side should the sidebar use?"
19
+ - "Should click on backdrop close it?"
20
+ - "Do we need fixed width/height constraints?"
21
+
22
+ ## Implementation Recipe
23
+ 1. Import `Sidebar`.
24
+ 2. Bind visibility with `v-model`.
25
+ 3. Configure side, size, backdrop, and animation duration.
26
+ 4. Render panel content in default slot.
27
+ 5. Wire close interactions and optional analytics events.
28
+
29
+ ## Validation And Edge Cases
30
+ - Verify body scroll lock and Escape-close behavior.
31
+ - Ensure panel remains usable on small viewports.
32
+ - Keep navigation state synced when sidebar closes.
33
+
34
+ ## Definition Of Done
35
+ - Sidebar opens/closes smoothly and supports intended workflow.
@@ -0,0 +1,36 @@
1
+ # Umbra Skill: CollectionPicker
2
+
3
+ Use this skill for selecting one item from a user-facing collection, with optional item creation.
4
+
5
+ ## When To Use
6
+ - You need a selectable list of `CollectionItem` objects.
7
+ - You need optional in-picker creation (`item-create`).
8
+ - You need custom trigger UI through the `label` slot.
9
+
10
+ ## Required Context Checklist
11
+ - Collection source and identity fields (`id`, `title`).
12
+ - Selected item ownership (`v-model:selected-item`) and persistence.
13
+ - Whether user can create new items (`allowCreate`).
14
+ - Trigger style choice: default label vs custom `#label` vs hidden.
15
+
16
+ ## Ask Developer If Missing
17
+ - "Where does the item list come from and how is it refreshed?"
18
+ - "Should create flow be enabled, and who persists new items?"
19
+ - "What should happen immediately after item selection?"
20
+
21
+ ## Implementation Recipe
22
+ 1. Import `CollectionPicker` and `CollectionItem`.
23
+ 2. Bind `:items` and `v-model:selected-item`.
24
+ 3. Handle `@item-selected` for side effects.
25
+ 4. If enabled, handle `@item-create` and persist before appending.
26
+ 5. Optionally provide a custom `#label` trigger.
27
+
28
+ ## Validation And Edge Cases
29
+ - Use stable `id` values; avoid re-creating IDs per render.
30
+ - Guard create flow against empty/duplicate names in parent logic.
31
+ - Keep parent selected item in sync when source list is refreshed.
32
+
33
+ ## Definition Of Done
34
+ - Selection emits and model updates are consistent.
35
+ - Optional create flow persists and selects new item correctly.
36
+ - Trigger UX matches requirements (default/custom/hidden label).
@@ -0,0 +1,34 @@
1
+ # Reference: CollectionPicker
2
+
3
+ Source of truth:
4
+ - `packages/core/src/components/pickers/CollectionPicker/CollectionPicker.vue`
5
+ - `packages/core/src/components/pickers/CollectionPicker/README.md`
6
+
7
+ ## Public Props
8
+ - `items: CollectionItem[]`
9
+ - `selectedItem: CollectionItem | null`
10
+ - `loading?: boolean`
11
+ - `label?: boolean` (default `true`)
12
+ - `buttonLabel?: string`
13
+ - `headerLabel?: string`
14
+ - `newItemLabel?: string`
15
+ - `itemIcon?: string`
16
+ - `newItemIcon?: string`
17
+ - `allowCreate?: boolean` (default `true`)
18
+ - `placeholder?: string`
19
+
20
+ ## Events
21
+ - `item-selected` -> `CollectionItem`
22
+ - `item-create` -> `string` (new title)
23
+ - `update:selectedItem` -> `CollectionItem | null`
24
+
25
+ ## Types
26
+ - `CollectionItem` requires:
27
+ - `id: string`
28
+ - `title: string`
29
+ - additional fields are allowed
30
+
31
+ ## Agent Verification Checklist
32
+ - `v-model:selected-item` stays synchronized with selected row.
33
+ - `item-create` is handled and new item appears in source list.
34
+ - Custom `#label` renders, and `:label="false"` hides label content.
@@ -0,0 +1,36 @@
1
+ # Umbra Skill: ColorPicker
2
+
3
+ Use this skill for selecting colors from Umbra's color palette with optional custom trigger rendering.
4
+
5
+ ## When To Use
6
+ - You need a typed `Color` selection model.
7
+ - You need configurable trigger dot styles and palette popover.
8
+ - You need custom trigger UI using the `label` slot.
9
+
10
+ ## Required Context Checklist
11
+ - Selected color state and persistence (`v-model:color`).
12
+ - Whether popup interaction can be disabled (`preventPopup`).
13
+ - Trigger style needs: dot props vs custom `#label`.
14
+ - Whether color metadata (name/weight/hex) should be shown in picker.
15
+
16
+ ## Ask Developer If Missing
17
+ - "Should we use Umbra palette defaults or a preselected custom value?"
18
+ - "Do we need read-only trigger mode using `preventPopup`?"
19
+ - "Is default dot trigger enough, or do you want custom `#label`?"
20
+
21
+ ## Implementation Recipe
22
+ 1. Import `ColorPicker` and color helpers as needed.
23
+ 2. Bind `v-model:color` to a `ref<Color>`.
24
+ 3. Configure trigger via dot props, or provide custom `#label`.
25
+ 4. Handle `@update:color` for side effects (theme updates, previews).
26
+ 5. Use parent validation/rules for downstream constraints.
27
+
28
+ ## Validation And Edge Cases
29
+ - Keep `Color` objects normalized (`name`, `hex`, `weight`).
30
+ - Avoid invalid custom color payload shapes in parent state.
31
+ - Verify behavior with `preventPopup=true` and disabled-like flows.
32
+
33
+ ## Definition Of Done
34
+ - Selected color updates and emits consistently.
35
+ - Trigger appearance follows design (dot props or custom label).
36
+ - Color-dependent side effects update without stale state.
@@ -0,0 +1,34 @@
1
+ # Reference: ColorPicker
2
+
3
+ Source of truth:
4
+ - `packages/core/src/components/pickers/ColorPicker/ColorPicker.vue`
5
+ - `packages/core/src/components/pickers/ColorPicker/README.md`
6
+
7
+ ## Public Props
8
+ - `color: Color`
9
+ - `pickerOffsetX: number` (default `0`)
10
+ - `preventPopup: boolean` (default `false`)
11
+ - `label?: boolean` (default `true`)
12
+ - `dotSize?: number | string`
13
+ - `dotRadius?: number | string`
14
+ - `dotBorderWidth?: number`
15
+ - `dotBorderColor?: string`
16
+ - `dotBorderColorActive?: string`
17
+ - `showColorInfo?: boolean` (default `true`)
18
+
19
+ ## Slots
20
+ - `label` -> custom trigger content
21
+
22
+ ## Events
23
+ - `update:color` -> `Color`
24
+
25
+ ## Type Notes
26
+ - `Color` shape:
27
+ - `name: string | null`
28
+ - `hex: string`
29
+ - `weight: number | null`
30
+
31
+ ## Agent Verification Checklist
32
+ - `v-model:color` receives chosen swatch value.
33
+ - Dot props apply when default trigger is used.
34
+ - Custom `#label` and `:label="false"` behave as expected.