You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wind UI has no parser for CSS positioning utilities. Developers are forced to use Flutter native Stack/Positioned widgets for any positioned layout, breaking the Wind UI-first philosophy.
Current support audit
Feature
Supported?
Parser
relative, absolute, fixed, sticky
❌ NO
None
top-0, bottom-4, left-2, right-8
❌ NO
None
inset-0, inset-x-0, inset-y-0
❌ NO
None
z-10, z-20, z-50
✅ YES
ZIndexParser
overflow-hidden, overflow-y-auto
✅ YES
OverflowParser
Consumer impact
In the Kodizm Flutter app, every positioned layout falls back to native widgets:
// CURRENT — forced to use native Stack/PositionedStack(
children: [
_buildMessageArea(),
Positioned(
bottom:16,
right:16,
child:_buildScrollToBottomFAB(),
),
],
)
fixed and sticky can be deferred to a follow-up if complex — document as future work
Priority
This is the single biggest feature gap in Wind UI that forces Flutter native fallbacks. Every consumer app with overlays, badges, FABs, or tooltips hits this limitation.
Problem
Wind UI has no parser for CSS positioning utilities. Developers are forced to use Flutter native
Stack/Positionedwidgets for any positioned layout, breaking the Wind UI-first philosophy.Current support audit
relative,absolute,fixed,stickytop-0,bottom-4,left-2,right-8inset-0,inset-x-0,inset-y-0z-10,z-20,z-50overflow-hidden,overflow-y-autoConsumer impact
In the Kodizm Flutter app, every positioned layout falls back to native widgets:
Common use cases blocked
Proposed Solution
1. Create
PositionParserAdd a new parser at
lib/src/parser/parsers/position_parser.dartthat handles:Position type tokens:
relative→ Sets_isRelative: trueon WindStyle (renders asStack)absolute→ Sets_isAbsolute: trueon WindStyle (renders asPositionedinside parentStack)fixed→ Sets_isFixed: trueon WindStyle (renders as overlay orPositioned.fill)sticky→ Sets_isSticky: trueon WindStyle (considerSliverPersistentHeaderor skip for v1)Offset tokens (Tailwind convention):
top-{n},bottom-{n},left-{n},right-{n}— pixel offsets using the spacing scaletop-0,bottom-0, etc. — zero offsetinset-{n}→ all four sidesinset-x-{n}→ left + rightinset-y-{n}→ top + bottomtop-[12px],left-[50%]2. Extend
WindStyleAdd positioning fields to
WindStyleinlib/src/parser/wind_style.dart:3. Update Widget Rendering
In the WDiv build logic, when
positionis set:relative→ Wraps children in aStackabsolute→ Wraps self inPositioned(top:, right:, bottom:, left:)— expects parent to be aStack(fromrelative)fixed→ UsesOverlayorPositioned.filldepending on contextFlutter mapping
relative(parent)Stack(children: [...])absolute top-0 right-0(child)Positioned(top: 0, right: 0, child: ...)absolute inset-0Positioned.fill(child: ...)absolute bottom-4 right-4Positioned(bottom: 16, right: 16, child: ...)Spacing scale for offsets
Follow the existing Wind UI spacing scale (4px base):
top-0top-1top-2top-3top-4top-5top-6top-8top-10top-12top-16top-[24px]Files to Create/Modify
lib/src/parser/parsers/position_parser.dartlib/src/parser/wind_style.dartlib/src/parser/wind_parser.dartlib/src/widgets/w_div.darttest/parser/position_parser_test.darttest/widget/position_test.dartAcceptance Criteria
relativeclassName on WDiv renders its children inside aStackabsoluteclassName on WDiv renders asPositionedinside parent Stacktop-{n},bottom-{n},left-{n},right-{n}set Positioned offsetsinset-{n}sets all four offsets,inset-x-{n}sets left+right,inset-y-{n}sets top+bottomtop-[24px],left-[50%]z-{n}(existing) works correctly with the new positioning systemfixedandstickycan be deferred to a follow-up if complex — document as future workPriority
This is the single biggest feature gap in Wind UI that forces Flutter native fallbacks. Every consumer app with overlays, badges, FABs, or tooltips hits this limitation.