naked_ui 1.0.0-beta.14
naked_ui: ^1.0.0-beta.14 copied to clipboard
A library of behavior-first UI components for Flutter that separate state from presentation.
1.0.0-beta.14 #
Fixes #
- Link each
NakedDisclosuretrigger to its controlled panel in the semantics tree. Web relationships now resolve to the current panel DOM node after repeated remounts, while native trigger identity and the panel identifier remain stable.
1.0.0-beta.13 #
Features #
- Add
NakedDisclosure, a standalone headless button-and-panel primitive with controlled and uncontrolled state, accessible expanded semantics, shared widget state, normal panel focus traversal, and optional exit-aware transitions that preserve panel state while closing.
1.0.0-beta.12 #
Features #
- Add
NakedButton.semanticHinton the same Semantics node as the button role, label, enabled state, and tap/long-press actions. - Add
NakedSelect.semanticValueso the trigger can announce a human-readable selection instead ofT.toString().SemanticsRole.comboBoxexists on Flutter 3.41+ but debug semantics still throwMissing checks for role(flutter/flutter#172918), so the trigger keeps the merged button + expanded + value contract. - Add
NakedRadioGroup, a thin wrapper over Flutter'sRadioGroupthat supplies what it lacks: a nullableonChanged(null means disabled), a groupenabledstate radios inherit, and an optional accessible group label. Flutter'sRadioGroupkeeps the singleSemanticsRole.radioGroupnode; the label is a plain container around it, never a second role node.
1.0.0-beta.11 #
Features #
- Add dependency-free
NakedLinkwith Link semantics, optional destination metadata, caller-owned activation, observable hover/focus/press/disabled state, and caller-owned focus nodes. Primary tap, semantic tap, Enter, and Numpad Enter activate; Space and held-key repeats remain unclaimed. Inert Links expose no Link role, destination, focus stop, or tap action.
1.0.0-beta.10 #
Features #
- Add
NakedAccordion.itemBuilderfor styling a trigger and panel as one unit. It receives the sameNakedAccordionItemStateas the trigger builder plus the fully assembled item as its child, and its context resolvesNakedAccordionItemState.controllerOfto the authoritative controller shared with the trigger and panel.
Fixes #
- Track
NakedAccordionpress state whenever the item is enabled instead of only whenonPressChangeis supplied, soWidgetState.pressedreaches builders without a callback, and clear the pressed state when the item becomes disabled.
1.0.0-beta.9 #
Fixes #
- Keep
NakedTextField'sWidgetState.pressed,onTapChange, andonPressChangesynchronized when selection gestures take over; block disabled pointer and selection paths, and defer lifecycle cleanup callbacks to avoid rebuilding while the widget tree is locked. - Mark
NakedToggleOptionsemantics as part of a mutually exclusive group, matching Flutter's segmented-control contract for enabled, selected, and disabled options.
1.0.0-beta.8 #
Fixes #
- Preserve tooltip overlay semantics when
semanticLabelis absent or blank, while continuing to avoid duplicate announcements when a non-empty label represents the content on the trigger. Explicit semantics overrides remain authoritative.
1.0.0-beta.7 #
Features #
- Add
NakedSliderState.visualPercentageOffor mapping arbitrary logical fractions to physical track alignment across orientation, text direction, and inversion, while preservingvisualPercentageAtthumb placement.
1.0.0-beta.6 #
Fixes #
- Make
NakedTextFieldhonor ambientDefaultSelectionStylecursor and selection colors, including context-resolvedCupertinoDynamicColorvariants, while preserving explicit cursor precedence, focus gating, and platform fallbacks.
Maintenance #
- Point package metadata at the canonical
conceptadev/naked_uirepository.
1.0.0-beta.5 #
Breaking changes #
- Replace alignment-pair overlay positioning with a Radix-shaped
OverlayPositionConfig: side, logical alignment, signed side/alignment offsets, collision padding, collision avoidance, and a resolvedOverlayPlacementavailable to overlay descendants after flip or shift. - Change
NakedSliderfrom onedouble valueto a nonempty, orderedList<double> values. Callbacks are list-valued; defaults are nowmin=0,max=100, andstep=1. The slider supports arbitrary thumb counts, orientation, inversion, minimum spacing, nearest-thumb pointer selection, non-crossing constraints, and per-thumb focus, labels, formatters, and semantics actions.
Features and behavior changes #
- Add controlled
open/onOpenChangedcontracts to Select and Tooltip. Controlled owners may accept or reject trigger, selection, Escape, outside tap, hover, focus, and touch requests without transient visual mutation. - Keep Tooltip open while either its trigger or overlay content is hovered,
with an opt-out through
disableHoverableContent; expose the final collision-resolved placement to tooltip content. - Add separate keyed Popover anchors and automatic/manual Tabs activation.
- Add controlled menu checkbox items and typed radio groups/items with checked roles and mutually-exclusive semantics.
- Add recursively composable submenus with delayed hover handoff, LTR/RTL open/close arrows, Escape handling, sibling coordination, root dismissal, first-item focus, and trigger-focus restoration.
1.0.0-beta.4 #
Features #
- Add
SemanticsRole.alertDialogsupport toNakedDialogand ashowNakedAlertDialoghelper with required non-empty caller-localized names, a non-dismissible outside barrier by default, null cancellation from Escape and platform Back, mandatory focus entry, safe initial-focus selection, closed-loop traversal, and caller-owned focus-node handling. Dismissible barriers require a non-empty localized label. ExistingNakedDialogandshowNakedDialogdefaults remain unchanged.
Behavior changes #
- Migrate
NakedToggleGroupoptions from independent Tab stops to one roving-focus stop: Tab enters and exits once, arrows and Home/End move focus without selecting, activation proposes the controlled value, and disabled or dynamically removed options repair focus within the group.
1.0.0-beta.3 #
Fixes and hardening #
- Scope overlay-item builders to their declared state type:
NakedMenuItemandNakedSelectOptionbuilders now receive a context containing a matchingNakedStateScope<S>, soNakedMenuItemState/NakedSelectOptionState'sof/controllerOfhelpers resolve to the item state. Downstream code no longer needsNakedButtonState, which leaked the internal button implementation.
1.0.0-beta.2 #
Breaking changes #
- Require Dart 3.9 and Flutter 3.41, matching the
RawTooltipAPI used by the package. - Treat
NakedSelect.valueas fully controlled, includingnull; a select withoutonChangedis now consistently non-interactive. - Make
NakedAccordionController.valuesimmutable to callers and preserve its observable FIFO ordering. - Make
NakedStateScope.controllerOftype-specific; generic state helpers now require the requested value type. - Require
NakedMenuto have either achildorbuilder, and throw a descriptive error when menu/select items are used outside their owner.
Fixes and hardening #
- Rebuild controller-driven tabs, prevent duplicate tab selection callbacks,
replace duplicated content semantics when
semanticLabelis set, and keep orientation-aware Home/End navigation within each tab bar. - Apply dialog, tab, menu, and menu-item semantic roles, including selected state for select options.
- Correct focus-node ownership swaps across controls and remove the redundant
focus owner around
EditableText. - Consolidate overlay positioning, including safe handling of oversized content, and rebuild Popover on the shared anchored-overlay shell.
- Keep inherited callbacks current, initialize replacement accordion controllers, and scope slider drag-end values to each drag session.
- Correct example paths in CI workflows and remove redundant dependency steps.
1.0.0-beta.1 #
- feat(naked-select): add
mouseCursorproperty to NakedSelect - refactor(naked-tooltip): replace
RawMenuAnchorwithRawTooltip - fix: stabilize flaky tests (InkSparkle shader + focus mode)
0.2.0-beta.7 #
- fix: text style handling in NakedTextField
- feat: improve 3.27-safe semantics for menu, select, accordion, checkbox, radio, slider, and text field
0.2.0-beta.6 #
- fix: disabled and error state support for NakedTextField
0.2.0-beta.5 #
- fix: NakedAccordionItemState scope on content
- refactor: remove NakedMenuController typedef
0.2.0-beta.4 #
- docs: refine documentation for developer clarity
- refactor: Simplify NakedTextFieldBuilder signature
- feat: add excludeSemantics parameter to all widgets
0.2.0-beta.3 #
- feat: expose StrutStyle to NakedTextField
- fix: state scope not in the Context
- feat: recreate NakedTooltip widget
- refactor: Overlay Rendering
- docs: Improve the usage examples
0.2.0-beta.2 #
0.2.0-beta.1 #
-
Added: Popover; Toggle
-
API: Standardized state callbacks (onHoverChange/onPressChange/onFocusChange); removed onDisabledState (use enabled); added onSelectChange/onDragChange where applicable
-
Better use of Raw Flutter components where available
-
Accessibility: Improved semantics across button, checkbox, radio, slider, select, tabs, dialog, tooltip
-
Focus/State: Unified focus handling (FocusNodeMixin) and consistent hover/press/selected for builders
-
Architecture: Builder-first APIs (e.g., NakedTextField builder) with state provided via NakedStateScope
0.0.1-dev.2 - 2025-07-03 #
Features #
- "Naked" - A Behavior-First UI Component Library for Flutter (#579) (c55b55f)
- Add maybeOf helper to InheritedWidgets and refactor of() (805a37e)
- Add maybeOf helper to InheritedWidgets and refactor of() (805a37e)
- Add test for Hover to RadioButton (#601) (8bd0425)
- Add textStyle prop in NakedTextField (#608) (4b5252b)
- Implement Tooltip Lifecycle (#603) (2ddbf60)
- Recreate Button using Naked (#587) (0d55724)
- Refactor radio and checkbox components with new architecture (#672) (4f3ce7d)
Bug Fixes #
Miscellaneous Chores #
0.0.1-dev.0 #
- Initial development release
- Core functionality for HeadlessButton component
- State management via HeadlessInteractiveStateController
- Support for interactive states (disabled, focused, hovered, pressed)
- Fully customizable rendering via builder pattern