← Back to Policy Tracker guide

Thursday Date Picker, Full Build Guide

Replaces the free calendar on ViewItem's Planned Publish Date with a ranked list of upcoming Thursdays — item counts, a "this week's release" tag, and a relative-time label per row. Mockup: the approved design. Build this control by control in the real editor, same as the rest of this app — not a YAML paste.

Jump to: · Why the old date picker stays, hidden 1. Extend ViewItem.OnVisible 2. Hide the old calendar field 3. Build the new trigger field 4. Build the picker modal and card list 5. Test everything

Why the old date picker stays, hidden

dpkPublishDate1.SelectedDate is read directly by a lot of other formulas already on this screen and elsewhere — the 10-day warning banner, the Save button's date validation, the actual Patch that writes 'Planned Publish Date' when you save. Rewiring every one of those to a new variable instead would be a much bigger, riskier change for no real benefit.

Instead: dpkPublishDate1 stays exactly where it is, keeps doing exactly what it already does, just becomes invisible. Its DefaultDate gets repointed to a new variable, varPlannedPublishDate, which the new picker sets. Everything downstream keeps reading dpkPublishDate1.SelectedDate completely unchanged and never needs to know the picker UI changed.

1. Extend ViewItem.OnVisible

Adds two things: varPlannedPublishDate (defaults new entries to the nearest Thursday, keeps existing entries on their saved date — this is also what fixes "new entries should auto-pick the closest Thursday"), and colThursdayOptions, a fresh list of the next 104 Thursdays (2 years) with a live item count per week, rebuilt every time the screen opens.

Click the ViewItem screen itself in Tree view (not a control inside it), select OnVisible, select everything in the box, and paste this over the whole thing:

=Set(varLoadingLinks, true);
Set(varSaving, false);
Set(varShowLinkModal, false);
Set(varSelectedLink, Blank());
Set(varErrTitle, false);
Set(varErrOwner, false);
Set(varErrDocType, false);
Set(varErrPublishDate, false);
Set(
    varOwnerDefault,
    If(
        IsBlank(varSelectedRelease) || IsBlank(varSelectedRelease.Owner.Email),
        Table({DisplayName: User().FullName, Mail: User().Email}),
        Table({DisplayName: varSelectedRelease.Owner.DisplayName, Mail: varSelectedRelease.Owner.Email})
    )
);
Set(
    varPlannedPublishDate,
    If(
        IsBlank(varSelectedRelease) || IsBlank(varSelectedRelease.'Planned Publish Date'),
        DateAdd(Today(), Mod(5 - Weekday(Today()) + 7, 7), "Days"),
        varSelectedRelease.'Planned Publish Date'
    )
);
Set(varShowThursdayPicker, false);
ClearCollect(
    colThursdayOptions,
    ForAll(
        Sequence(104),
        With(
            {_thu: DateAdd(Today(), Mod(5 - Weekday(Today()) + 7, 7) + (Value - 1) * 7, "Days")},
            {
                ThursdayDate: _thu,
                ItemCount: CountRows(
                    Filter(
                        'Policy Proof Tracker',
                        Year('Planned Publish Date') = Year(_thu) &&
                        Month('Planned Publish Date') = Month(_thu) &&
                        Day('Planned Publish Date') = Day(_thu)
                    )
                )
            }
        )
    )
);
If(
    !varDeepLinkHandled && !IsBlank(Param("ID")),
    Set(varDeepLinkHandled, true);
    Set(varItemID, Param("ID"));
    Set(varLoading, true);
    Refresh('Policy Proof Tracker');
    Set(varDeepLinkItem, LookUp('Policy Proof Tracker', ID = Value(varItemID)));
    If(
        !IsBlank(varDeepLinkItem),
        Set(varSelectedRelease, varDeepLinkItem);
        Set(varSelectPolicy, "Filled");
        Set(varParentSaved, true);
        Set(varSelectedItem, varDeepLinkItem);
        Set(varSourceScreen, "Main");
        Set(varSelectedPerson, varDeepLinkItem.Owner);
        Refresh(PolicyLinks);
        BuildLinksForSource(varDeepLinkItem.ID);
        Set(varOwnerDefault, Table({DisplayName: varDeepLinkItem.Owner.DisplayName, Mail: varDeepLinkItem.Owner.Email}));
        Set(varPlannedPublishDate, varDeepLinkItem.'Planned Publish Date'),
        Notify("This item could not be found. It may have been deleted or the link may be incorrect.", NotificationType.Error);
        Set(varDeepLinkNotFound, true)
    );
    Set(varLoading, false)
);
If(
    !IsBlank(varSelectedRelease.ID),
    Refresh(PolicyLinks);
    BuildLinksForSource(varSelectedRelease.ID);
    Set(varLoadingLinks, false),
    Clear(colLinks);
    Set(varLoadingLinks, false)
);
Reset(txtTitle1);
Reset(drpDocType1);
Reset(dpkPublishDate1);
Reset(ckbHighPriority1);
Reset(txtReasonHighPri1);
Reset(ckbExtConsult1);
Reset(txtExtConsultDetails1);
Reset(ckbTopItem1);
Reset(txtNewsletterTitle1);
Reset(txtAudience1);
Reset(txtSummary1);
Reset(txtRemarks1);
Reset(ckbPillarLead1);
Reset(radApproval1);
Reset(ckbPublished1);
Reset(dpkPublishedDate1);
Reset(cmb_Owner1)

Only additions versus what's already there: the varPlannedPublishDate block, the Set(varShowThursdayPicker, false) line, the ClearCollect(colThursdayOptions, ...) block, and one added line in the deep-link branch so that path sets varPlannedPublishDate too. Everything else is identical to your current OnVisible.

104 rows is deliberately generous (2 years of Thursdays) so nobody ever hits the end of the list. Each row's count is its own small Filter over 'Policy Proof Tracker' — fine at this table's realistic size, no need for a fancier precomputed version.

2. Hide the old calendar field

Three property changes, no control deletions.

ControlPropertyNew value
dpkPublishDate1DefaultDate=varPlannedPublishDate
dpkPublishDate1Visible=false
lblThursdayNote1Visible=false
recErrPublishDate1Visible=false

The last two are now dead code — lblThursdayNote1 warned about non-Thursday dates, recErrPublishDate1 was a red error highlight behind the old picker. Neither can be reached once only Thursdays are selectable; the new trigger field gets its own error styling in the next step instead of deleting these outright.

3. Build the new trigger field

In Tree view, click dpkPublishDate1 once to select it (this makes new controls Insert as siblings next to it, in the same parent), then paste this whole block — it adds all three new controls in one go: recPublishDateTrigger1, lblPublishDateTriggerText1, iconPublishDateChevron1.

Note on recPublishDateTrigger1: this needs rounded corners, and neither Rectangle nor classic Label support any Radius* property in this app — confirmed multiple times before, documented in the Bible's known-bad-patterns list. Using Classic/Button@2.2.0 with DisplayMode.View instead, the confirmed-working substitute already used elsewhere in this app for exactly this need (the type-filter chips, the approval-stepper dots).
- recPublishDateTrigger1:
    Control: Classic/Button@2.2.0
    Properties:
      BorderColor: =If(varErrPublishDate, RGBA(163, 45, 45, 1), RGBA(223, 229, 224, 1))
      BorderThickness: =1
      Color: =RGBA(0, 0, 0, 0)
      DisplayMode: =DisplayMode.View
      Fill: =RGBA(255, 255, 255, 1)
      Font: =Font.'Open Sans'
      Height: =40
      HoverBorderColor: =RGBA(11, 74, 54, 1)
      HoverFill: =RGBA(244, 246, 243, 1)
      OnSelect: =Set(varShowThursdayPicker, true)
      PressedFill: =RGBA(244, 246, 243, 1)
      RadiusBottomLeft: =8
      RadiusBottomRight: =8
      RadiusTopLeft: =8
      RadiusTopRight: =8
      Text: =""
      Width: =Parent.Width
      Y: =22
- lblPublishDateTriggerText1:
    Control: ModernText@1.0.0
    Properties:
      Color: =RGBA(22, 33, 28, 1)
      Font: =Font.'Open Sans'
      FontWeight: =FontWeight.Bold
      Size: =11
      Height: =40
      Width: =Parent.Width - 40
      X: =14
      Y: =22
      Text: =Text(varPlannedPublishDate, "dddd, d mmm yyyy")
- iconPublishDateChevron1:
    Control: ModernIcon@1.1.1
    Properties:
      Icon: ="ChevronDown"
      IconColor: =RGBA(91, 105, 97, 1)
      Height: =16
      Width: =16
      X: =Parent.Width - 30
      Y: =34
Test so far: click the new field, nothing should happen yet (the modal doesn't exist until step 4) — just confirm it visually replaces the old calendar and shows the current date correctly.

4. Build the picker modal and card list

One new top-level control, containing everything else nested inside it — the modal shell, the header, the note, the gallery, and the card template all paste in as one tree. In Tree view, select the ViewItem screen itself (or right-click DeleteItemModal1 and choose "Paste after" if your version of Studio supports it), so this lands as the very last child of the screen, above everything else in paint order.

- ThursdayPickerModal1:
    Control: GroupContainer@1.5.0
    Variant: AutoLayout
    Properties:
      Fill: =RGBA(53, 61, 63, 0.84)
      Height: =Parent.Height
      Width: =Parent.Width
      LayoutDirection: =LayoutDirection.Vertical
      LayoutAlignItems: =LayoutAlignItems.Center
      LayoutJustifyContent: =LayoutJustifyContent.Center
      Visible: =varShowThursdayPicker
    Children:
      - conThuModalCard1:
          Control: GroupContainer@1.5.0
          Variant: AutoLayout
          Properties:
            AlignInContainer: =AlignInContainer.SetByContainer
            FillPortions: =0
            Fill: =RGBA(244, 246, 243, 1)
            Width: =420
            Height: =560
            LayoutDirection: =LayoutDirection.Vertical
            LayoutGap: =4
            DropShadow: =DropShadow.Regular
            RadiusBottomLeft: =16
            RadiusBottomRight: =16
            RadiusTopLeft: =16
            RadiusTopRight: =16
            PaddingBottom: =16
            PaddingLeft: =16
            PaddingRight: =16
            PaddingTop: =16
          Children:
            - conThuModalHeader1:
                Control: GroupContainer@1.5.0
                Variant: AutoLayout
                Properties:
                  FillPortions: =0
                  Height: =32
                  LayoutDirection: =LayoutDirection.Horizontal
                  LayoutJustifyContent: =LayoutJustifyContent.SpaceBetween
                  LayoutAlignItems: =LayoutAlignItems.Center
                  Width: =Parent.Width
                Children:
                  - lblThuModalTitle1:
                      Control: ModernText@1.0.0
                      Properties:
                        Text: ="Pick a Thursday"
                        Color: =RGBA(22, 33, 28, 1)
                        Font: =Font.'Lato Black'
                        FontWeight: =FontWeight.Bold
                        Size: =16
                  - btnThuModalClose1:
                      Control: ModernButton@1.0.0
                      Properties:
                        Icon: ="Dismiss"
                        Layout: =ButtonLayout.IconOnly
                        Appearance: =ButtonAppearance.Subtle
                        OnSelect: =Set(varShowThursdayPicker, false)
            - lblThuModalNote1:
                Control: Label@2.5.1
                Properties:
                  FillPortions: =0
                  Text: ="Only Thursdays are shown — releases only go out on a Thursday."
                  Color: =RGBA(91, 105, 97, 1)
                  Font: =Font.'Open Sans'
                  Size: =9
                  Height: =16
                  Width: =Parent.Width
            - galThursdayOptions1:
                Control: Gallery@2.15.0
                Variant: VariableHeight
                Properties:
                  FillPortions: =1
                  Items: =colThursdayOptions
                  Width: =Parent.Width
                  TemplateSize: =78
                Children:
                  - conThuCard1:
                      Control: GroupContainer@1.5.0
                      Variant: ManualLayout
                      Properties:
                        Fill: |-
                          =If(
                              ThisItem.ThursdayDate = varPlannedPublishDate, RGBA(227, 239, 232, 1),
                              ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, RGBA(255, 243, 214, 1),
                              RGBA(255, 255, 255, 1)
                          )
                        BorderColor: |-
                          =If(
                              varSelectPolicy = "Empty" && DateDiff(Today(), ThisItem.ThursdayDate, "Days") >= 0 && DateDiff(Today(), ThisItem.ThursdayDate, "Days") < 10 && !ckbHighPriority1.Value && !ckbExtConsult1.Value, RGBA(163, 45, 45, 1),
                              ThisItem.ThursdayDate = varPlannedPublishDate, RGBA(11, 74, 54, 1),
                              ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, RGBA(255, 186, 8, 1),
                              RGBA(223, 229, 224, 1)
                          )
                        BorderThickness: |-
                          =If(
                              varSelectPolicy = "Empty" && DateDiff(Today(), ThisItem.ThursdayDate, "Days") >= 0 && DateDiff(Today(), ThisItem.ThursdayDate, "Days") < 10 && !ckbHighPriority1.Value && !ckbExtConsult1.Value, 2,
                              ThisItem.ThursdayDate = varPlannedPublishDate, 2,
                              ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, 2,
                              1
                          )
                        DropShadow: =DropShadow.None
                        Height: =70
                        Width: =Parent.TemplateWidth - 8
                        RadiusBottomLeft: =12
                        RadiusBottomRight: =12
                        RadiusTopLeft: =12
                        RadiusTopRight: =12
                        Y: =4
                      Children:
                        - conThuCardContent1:
                            Control: GroupContainer@1.5.0
                            Variant: AutoLayout
                            Properties:
                              LayoutDirection: =LayoutDirection.Horizontal
                              LayoutAlignItems: =LayoutAlignItems.Center
                              LayoutGap: =12
                              PaddingLeft: =10
                              PaddingRight: =10
                              Width: =Parent.Width
                              Height: =Parent.Height
                              X: =0
                              Y: =0
                            Children:
                              - conThuChip1:
                                  Control: GroupContainer@1.5.0
                                  Variant: ManualLayout
                                  Properties:
                                    FillPortions: =0
                                    Fill: =If(ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, RGBA(255, 186, 8, 1), RGBA(227, 239, 232, 1))
                                    Height: =50
                                    Width: =56
                                    RadiusBottomLeft: =10
                                    RadiusBottomRight: =10
                                    RadiusTopLeft: =10
                                    RadiusTopRight: =10
                                  Children:
                                    - lblThuChipBig1:
                                        Control: Label@2.5.1
                                        Properties:
                                          Text: |-
                                            =With(
                                                {
                                                    _thisWeekStart: DateAdd(Today(), -(Weekday(Today(), StartOfWeek.Monday) - 1), "Days"),
                                                    _thuWeekStart: DateAdd(ThisItem.ThursdayDate, -(Weekday(ThisItem.ThursdayDate, StartOfWeek.Monday) - 1), "Days")
                                                },
                                                With(
                                                    {_weeks: DateDiff(_thisWeekStart, _thuWeekStart, "Days") / 7},
                                                    If(
                                                        _weeks = 0, "This",
                                                        _weeks <= 8, _weeks & "wk",
                                                        Round(_weeks / 4.345, 0) & "mo"
                                                    )
                                                )
                                            )
                                          Color: =If(ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, RGBA(80, 50, 0, 1), RGBA(11, 74, 54, 1))
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Align: =Align.Center
                                          Size: =13
                                          Height: =24
                                          Width: =Parent.Width
                                          Y: =6
                                    - lblThuChipSmall1:
                                        Control: Label@2.5.1
                                        Properties:
                                          Text: |-
                                            =With(
                                                {
                                                    _thisWeekStart: DateAdd(Today(), -(Weekday(Today(), StartOfWeek.Monday) - 1), "Days"),
                                                    _thuWeekStart: DateAdd(ThisItem.ThursdayDate, -(Weekday(ThisItem.ThursdayDate, StartOfWeek.Monday) - 1), "Days")
                                                },
                                                If(DateDiff(_thisWeekStart, _thuWeekStart, "Days") = 0, "week", "ahead")
                                            )
                                          Color: =If(ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate, RGBA(80, 50, 0, 1), RGBA(11, 74, 54, 1))
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Align: =Align.Center
                                          Size: =7
                                          Height: =14
                                          Width: =Parent.Width
                                          Y: =30
                              - conThuTextCol1:
                                  Control: GroupContainer@1.5.0
                                  Variant: AutoLayout
                                  Properties:
                                    FillPortions: =1
                                    LayoutDirection: =LayoutDirection.Vertical
                                    LayoutGap: =2
                                    Height: =Parent.Height
                                  Children:
                                    - pillThuNextTag1:
                                        Control: ModernText@1.0.0
                                        Properties:
                                          FillPortions: =0
                                          AutoHeight: =true
                                          Align: =Align.Center
                                          Color: =RGBA(80, 50, 0, 1)
                                          Fill: =RGBA(255, 186, 8, 1)
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Size: =8
                                          Height: =18
                                          RadiusBottomLeft: =9
                                          RadiusBottomRight: =9
                                          RadiusTopLeft: =9
                                          RadiusTopRight: =9
                                          Text: |-
                                            =With(
                                                {
                                                    _startOfWeek: DateAdd(Today(), -(Weekday(Today(), StartOfWeek.Monday) - 1), "Days"),
                                                    _thu: First(colThursdayOptions).ThursdayDate
                                                },
                                                If(
                                                    _thu <= _startOfWeek + 6, "THIS WEEK'S RELEASE",
                                                    _thu <= _startOfWeek + 13, "NEXT WEEK'S RELEASE",
                                                    "NEXT RELEASE"
                                                )
                                            )
                                          Visible: =ThisItem.ThursdayDate = First(colThursdayOptions).ThursdayDate
                                          Width: =Parent.Width
                                    - pillThuTooSoonTag1:
                                        Control: ModernText@1.0.0
                                        Properties:
                                          FillPortions: =0
                                          AutoHeight: =true
                                          Align: =Align.Center
                                          Color: =RGBA(255, 255, 255, 1)
                                          Fill: =RGBA(163, 45, 45, 1)
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Size: =8
                                          Height: =18
                                          RadiusBottomLeft: =9
                                          RadiusBottomRight: =9
                                          RadiusTopLeft: =9
                                          RadiusTopRight: =9
                                          Text: ="TOO SOON — HIGH PRIORITY ONLY"
                                          Visible: |-
                                            =varSelectPolicy = "Empty" &&
                                            DateDiff(Today(), ThisItem.ThursdayDate, "Days") >= 0 &&
                                            DateDiff(Today(), ThisItem.ThursdayDate, "Days") < 10 &&
                                            !ckbHighPriority1.Value &&
                                            !ckbExtConsult1.Value
                                          Width: =Parent.Width
                                    - lblThuDate1:
                                        Control: Label@2.5.1
                                        Properties:
                                          FillPortions: =0
                                          AutoHeight: =true
                                          Text: =Text(ThisItem.ThursdayDate, "dddd, d mmmm yyyy")
                                          Color: =RGBA(22, 33, 28, 1)
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Size: =10
                                          Width: =Parent.Width
                              - pillThuLoad1:
                                  Control: ModernText@1.0.0
                                  Properties:
                                    FillPortions: =0
                                    AutoHeight: =true
                                    Text: =ThisItem.ItemCount & " item" & If(ThisItem.ItemCount <> 1, "s", "")
                                    Color: |-
                                      =If(
                                          ThisItem.ItemCount >= 5, RGBA(163, 45, 45, 1),
                                          ThisItem.ItemCount >= 3, RGBA(160, 100, 10, 1),
                                          RGBA(46, 125, 89, 1)
                                      )
                                    Fill: |-
                                      =If(
                                          ThisItem.ItemCount >= 5, RGBA(251, 230, 226, 1),
                                          ThisItem.ItemCount >= 3, RGBA(250, 237, 216, 1),
                                          RGBA(228, 243, 234, 1)
                                      )
                                    Font: =Font.'Open Sans'
                                    FontWeight: =FontWeight.Bold
                                    Size: =9
                                    Align: =Align.Center
                                    Height: =20
                                    Width: =88
                                    RadiusBottomLeft: =10
                                    RadiusBottomRight: =10
                                    RadiusTopLeft: =10
                                    RadiusTopRight: =10
                              - iconThuCheck1:
                                  Control: ModernIcon@1.1.1
                                  Properties:
                                    FillPortions: =0
                                    Icon: ="Checkmark"
                                    IconColor: =RGBA(11, 74, 54, 1)
                                    Visible: =ThisItem.ThursdayDate = varPlannedPublishDate
                                    Height: =18
                                    Width: =18
                        - recThuCardHit1:
                            Control: Rectangle@2.3.0
                            Properties:
                              Fill: =RGBA(0, 0, 0, 0)
                              Height: =Parent.Height
                              Width: =Parent.Width
                              HoverFill: =RGBA(0, 0, 0, 0.02)
                              OnSelect: |-
                                =Set(varPlannedPublishDate, ThisItem.ThursdayDate);
                                Set(varUnsavedChanges, true);
                                Set(varErrPublishDate, false);
                                Set(varShowThursdayPicker, false);
                                Reset(dpkPublishDate1)
Every rounded control above is either GroupContainer, ModernText, or Classic/Button with DisplayMode.View — the three confirmed-working options for Radius* properties in this app. recThuCardHit1 is a bare Rectangle with no radius at all, which is fine, it's an invisible click target fully covered by conThuCard1's already-rounded corners.

If your version of Studio doesn't accept a paste this deep in one go, paste ThursdayPickerModal1 down through galThursdayOptions1 first (stop before Children: under the gallery), confirm that lands, then select galThursdayOptions1 in Tree view and paste just the conThuCard1 block (from - conThuCard1: down) as its item template.

Card internals rebuilt, versus what first shipped: the date text and the item-count pill were both hand-positioned at the same X with different Y, which is why they rendered stacked/overlapping instead of side by side. Rather than guess more pixel offsets, the card's visible content is now a real layout row instead of freehand positions: conThuCardContent1 (a horizontal AutoLayout container, sized to exactly cover the card) holds, left to right, conThuChip1 (the relative-time chip, fixed width), conThuTextCol1 (the "next release" tag + date, FillPortions: =1 so it takes whatever width is left over regardless of actual card width, no more manual width math), pillThuLoad1, then iconThuCheck1 — each fixed-width sibling explicitly FillPortions: =0. recThuCardHit1 stays a separate, absolutely-positioned invisible click target underneath, since a click-through rectangle can't itself be an AutoLayout flow item.

The relative-time chip (conThuChip1) is also now the two-line stacked look from the mockup — a big bold top line (lblThuChipBig1, e.g. "3wk") and a small caption underneath (lblThuChipSmall1, "ahead", or "week" for the nearest Thursday) — instead of one small line of combined text. It's the one place still using a couple of manual Y offsets, but only to stack two lines inside a small fixed 56×50 box, not to lay out the whole card.

Also folded in: AutoHeight: =true on every ModernText pill (without it, they show a tiny internal scrollbar instead of sizing to fit), and the gold "next release" tag is dynamic — checks whether the nearest Thursday falls in the current Monday–Sunday week or the following one, so it correctly reads "Next week's release" when that's true and flips to "This week's release" on its own once the calendar week turns over.

5. Test everything

Design note on the 10-day rule inside the picker: deliberately doesn't block clicking a red-zone Thursday, and deliberately doesn't add a second "mark as urgent" checkbox inside the modal. The real gate already exists and works — the yellow banner that replaces the top bar and blocks Save until ckbHighPriority1 is ticked. The picker's red border/tag use the exact same condition that banner already checks, so they can never disagree with each other; a second override control inside the modal would just be a second copy of that rule to keep in sync, which is the same class of drift that caused the Owner bug earlier in this project.

6. Same design, applied to the Duplicate modal

Built from the user's own tweaked version of ThursdayPickerModal1 (not the original mockup-generated one), applied to the existing "Duplicate Entry" modal, which previously used a plain dropdown. The underlying data-building logic (colThursdays, the 52-week loop that hides Thursdays within 10 days unless the item is High Priority) is unchanged — only its output gained one field, and the modal around it is rebuilt.

What's different from the main picker, on purpose:

Step 1: btnDuplicate1, full replacement (only the OnSelect changed — ItemCount added to each collected row, and a sensible default selection set before the modal opens):

- btnDuplicate1:
    Control: ModernButton@1.0.0
    Properties:
      AccessibleLabel: ="Duplicate entry"
      Align: =Align.Center
      BasePaletteColor: =RGBA(11, 74, 54, 1)
      FontWeight: =""
      Height: =38
      Icon: ="Copy"
      OnSelect: |-
        =ClearCollect(
            colUpcomingEntries,
            AddColumns(
                Filter(
                    'Policy Proof Tracker',
                    'Planned Publish Date' >= Today() &&
                    'Planned Publish Date' <= DateAdd(Today(), 365, "Days")
                ),
                EntryDateKey,
                Date(Year('Planned Publish Date'), Month('Planned Publish Date'), Day('Planned Publish Date'))
            )
        );
        Set(
            varDaysToNextThursday,
            If(Mod(5 - Weekday(Today()) + 7, 7) = 0, 7, Mod(5 - Weekday(Today()) + 7, 7))
        );
        ClearCollect(
            colUpcomingCounts,
            GroupBy(colUpcomingEntries, EntryDateKey, GroupedEntries)
        );
        Clear(colThursdays);
        ForAll(
            Sequence(52),
            If(
                varSelectedRelease.'High Priority' ||
                varDaysToNextThursday + (Value - 1) * 7 >= 10,
                With(
                    {thurDate: DateAdd(Today(), varDaysToNextThursday + (Value - 1) * 7, "Days")},
                    With(
                        {matchedGroup: LookUp(colUpcomingCounts, EntryDateKey = thurDate)},
                        With(
                            {cnt: If(IsBlank(matchedGroup), 0, CountRows(matchedGroup.GroupedEntries))},
                            Collect(
                                colThursdays,
                                {
                                    ThursdayDate: thurDate,
                                    ThursdayLabel: Text(thurDate, "dddd d mmmm yyyy") &
                                        If(
                                            cnt = 0, " - clear",
                                            cnt = 1, " - 1 entry already scheduled",
                                            " - " & Text(cnt, "0") & " entries already scheduled"
                                        ),
                                    ItemCount: cnt
                                }
                            )
                        )
                    )
                )
            )
        );
        Set(varSelectedDuplicateDate, First(colThursdays).ThursdayDate);
        Set(varShowDuplicateModal1, true)
      PaddingBottom: =5
      PaddingLeft: =12
      PaddingRight: =12
      PaddingTop: =5
      RadiusBottomLeft: =4
      RadiusBottomRight: =4
      RadiusTopLeft: =4
      RadiusTopRight: =4
      Text: =""
      Tooltip: ="Duplicate Entry"

Step 2: DuplicateModal1, full replacement (paste over the entire existing modal, from DuplicateModal1: down):

- DuplicateModal1:
    Control: GroupContainer@1.5.0
    Variant: AutoLayout
    Properties:
      Fill: =RGBA(53, 61, 63, 0.84)
      Height: =Parent.Height
      LayoutAlignItems: =LayoutAlignItems.Center
      LayoutDirection: =LayoutDirection.Vertical
      LayoutJustifyContent: =LayoutJustifyContent.Center
      Visible: =varShowDuplicateModal1
      Width: =Parent.Width
    Children:
      - conDupModalCard1:
          Control: GroupContainer@1.5.0
          Variant: AutoLayout
          Properties:
            AlignInContainer: =AlignInContainer.SetByContainer
            DropShadow: =DropShadow.Regular
            Fill: =RGBA(244, 246, 243, 1)
            FillPortions: =0
            Height: =640
            LayoutDirection: =LayoutDirection.Vertical
            LayoutGap: =8
            PaddingBottom: =16
            PaddingLeft: =16
            PaddingRight: =16
            PaddingTop: =16
            RadiusBottomLeft: =16
            RadiusBottomRight: =16
            RadiusTopLeft: =16
            RadiusTopRight: =16
            Width: =420
          Children:
            - conDupModalHeader1:
                Control: GroupContainer@1.5.0
                Variant: AutoLayout
                Properties:
                  FillPortions: =0
                  Height: =32
                  LayoutAlignItems: =LayoutAlignItems.Center
                  LayoutDirection: =LayoutDirection.Horizontal
                  LayoutJustifyContent: =LayoutJustifyContent.SpaceBetween
                  Width: =Parent.Width
                Children:
                  - lblDupModalTitle1:
                      Control: ModernText@1.0.0
                      Properties:
                        Color: =RGBA(22, 33, 28, 1)
                        Font: =Font.'Lato Black'
                        FontWeight: =FontWeight.Bold
                        Size: =16
                        Text: ="Duplicate Entry"
                  - btnDupModalClose1:
                      Control: ModernButton@1.0.0
                      Properties:
                        Appearance: =ButtonAppearance.Subtle
                        Icon: ="Dismiss"
                        Layout: =ButtonLayout.IconOnly
                        OnSelect: =Set(varShowDuplicateModal1, false)
            - lblDupInstruction1:
                Control: Label@2.5.1
                Properties:
                  FillPortions: =0
                  Color: =RGBA(22, 33, 28, 1)
                  Font: =Font.'Open Sans'
                  FontWeight: =FontWeight.Bold
                  Height: =18
                  Size: =10
                  Text: ="Select the Thursday to duplicate this entry to:"
                  Width: =Parent.Width
            - lblDupNote1:
                Control: Label@2.5.1
                Properties:
                  AutoHeight: =true
                  FillPortions: =0
                  Color: =RGBA(91, 105, 97, 1)
                  Font: =Font.'Open Sans'
                  Size: =9
                  Text: =If(varSelectedRelease.'High Priority', "High Priority is active - all upcoming Thursdays are shown.", "Thursdays within 10 days are hidden. Mark this entry as High Priority to override and show all dates.")
                  Width: =Parent.Width
            - galDupThursdays1:
                Control: Gallery@2.15.0
                Variant: VariableHeight
                Properties:
                  FillPortions: =1
                  Items: =colThursdays
                  TemplateSize: =78
                  Width: =Parent.Width
                Children:
                  - conDupCard1:
                      Control: GroupContainer@1.5.0
                      Variant: ManualLayout
                      Properties:
                        BorderColor: |-
                          =If(
                              ThisItem.ThursdayDate = varSelectedDuplicateDate, RGBA(11, 74, 54, 1),
                              ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, RGBA(255, 186, 8, 1),
                              RGBA(223, 229, 224, 1)
                          )
                        BorderThickness: |-
                          =If(
                              ThisItem.ThursdayDate = varSelectedDuplicateDate, 2,
                              ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, 2,
                              1
                          )
                        DropShadow: =DropShadow.None
                        Fill: |-
                          =If(
                              ThisItem.ThursdayDate = varSelectedDuplicateDate, RGBA(227, 239, 232, 1),
                              ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, RGBA(255, 243, 214, 1),
                              RGBA(255, 255, 255, 1)
                          )
                        Height: =70
                        RadiusBottomLeft: =12
                        RadiusBottomRight: =12
                        RadiusTopLeft: =12
                        RadiusTopRight: =12
                        Width: =Parent.TemplateWidth - 8
                        Y: =4
                      Children:
                        - conDupCardContent1:
                            Control: GroupContainer@1.5.0
                            Variant: AutoLayout
                            Properties:
                              Height: =Parent.Height
                              LayoutAlignItems: =LayoutAlignItems.Center
                              LayoutDirection: =LayoutDirection.Horizontal
                              LayoutGap: =12
                              PaddingLeft: =10
                              PaddingRight: =10
                              Width: =Parent.Width
                            Children:
                              - conDupChip1:
                                  Control: GroupContainer@1.5.0
                                  Variant: ManualLayout
                                  Properties:
                                    AlignInContainer: =AlignInContainer.Center
                                    Fill: =If(ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, RGBA(255, 186, 8, 1), RGBA(227, 239, 232, 1))
                                    FillPortions: =0
                                    Height: =50
                                    RadiusBottomLeft: =10
                                    RadiusBottomRight: =10
                                    RadiusTopLeft: =10
                                    RadiusTopRight: =10
                                    Width: =56
                                  Children:
                                    - lblDupChipBig1:
                                        Control: Label@2.5.1
                                        Properties:
                                          Align: =Align.Center
                                          Color: =If(ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, RGBA(80, 50, 0, 1), RGBA(11, 74, 54, 1))
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Height: =24
                                          Text: |-
                                            =With(
                                                {
                                                    _thisWeekStart: DateAdd(Today(), -(Weekday(Today(), StartOfWeek.Monday) - 1), "Days"),
                                                    _thuWeekStart: DateAdd(ThisItem.ThursdayDate, -(Weekday(ThisItem.ThursdayDate, StartOfWeek.Monday) - 1), "Days")
                                                },
                                                With(
                                                    {_weeks: DateDiff(_thisWeekStart, _thuWeekStart, "Days") / 7},
                                                    If(
                                                        _weeks = 0, "This",
                                                        _weeks <= 8, _weeks & "wk",
                                                        Round(_weeks / 4.345, 0) & "mo"
                                                    )
                                                )
                                            )
                                          Width: =Parent.Width
                                          Y: =6
                                    - lblDupChipSmall1:
                                        Control: Label@2.5.1
                                        Properties:
                                          Align: =Align.Center
                                          Color: =If(ThisItem.ThursdayDate = First(colThursdays).ThursdayDate, RGBA(80, 50, 0, 1), RGBA(11, 74, 54, 1))
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Height: =14
                                          Size: =7
                                          Text: |-
                                            =With(
                                                {
                                                    _thisWeekStart: DateAdd(Today(), -(Weekday(Today(), StartOfWeek.Monday) - 1), "Days"),
                                                    _thuWeekStart: DateAdd(ThisItem.ThursdayDate, -(Weekday(ThisItem.ThursdayDate, StartOfWeek.Monday) - 1), "Days")
                                                },
                                                If(DateDiff(_thisWeekStart, _thuWeekStart, "Days") = 0, "week", "ahead")
                                            )
                                          Width: =Parent.Width
                                          Y: =30
                              - conDupTextCol1:
                                  Control: GroupContainer@1.5.0
                                  Variant: AutoLayout
                                  Properties:
                                    AlignInContainer: =AlignInContainer.Center
                                    DropShadow: =DropShadow.None
                                    FillPortions: =0
                                    Height: =Parent.Height
                                    LayoutDirection: =LayoutDirection.Vertical
                                    LayoutGap: =2
                                    LayoutMinWidth: =190
                                    PaddingTop: =5
                                    Width: =175
                                  Children:
                                    - pillDupEarliestTag1:
                                        Control: ModernText@1.0.0
                                        Properties:
                                          Align: =Align.Center
                                          AutoHeight: =true
                                          Color: =RGBA(80, 50, 0, 1)
                                          Fill: =RGBA(255, 186, 8, 1)
                                          FillPortions: =0
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Height: =18
                                          RadiusBottomLeft: =9
                                          RadiusBottomRight: =9
                                          RadiusTopLeft: =9
                                          RadiusTopRight: =9
                                          Size: =8
                                          Text: ="EARLIEST AVAILABLE"
                                          Visible: =ThisItem.ThursdayDate = First(colThursdays).ThursdayDate
                                          Width: =Parent.Width
                                    - lblDupDate1:
                                        Control: Label@2.5.1
                                        Properties:
                                          AlignInContainer: =AlignInContainer.Center
                                          AutoHeight: =true
                                          Color: =RGBA(22, 33, 28, 1)
                                          FillPortions: =0
                                          Font: =Font.'Open Sans'
                                          FontWeight: =FontWeight.Bold
                                          Height: =20
                                          Size: =10
                                          Text: =Text(ThisItem.ThursdayDate, "dddd, d mmmm yyyy")
                                          Width: =Parent.Width
                              - pillDupLoad1:
                                  Control: ModernText@1.0.0
                                  Properties:
                                    Align: =Align.Center
                                    AutoHeight: =true
                                    Color: |-
                                      =If(
                                          ThisItem.ItemCount >= 5, RGBA(163, 45, 45, 1),
                                          ThisItem.ItemCount >= 3, RGBA(160, 100, 10, 1),
                                          RGBA(46, 125, 89, 1)
                                      )
                                    Fill: |-
                                      =If(
                                          ThisItem.ItemCount >= 5, RGBA(251, 230, 226, 1),
                                          ThisItem.ItemCount >= 3, RGBA(250, 237, 216, 1),
                                          RGBA(228, 243, 234, 1)
                                      )
                                    FillPortions: =1
                                    Font: =Font.'Open Sans'
                                    FontWeight: =FontWeight.Bold
                                    Height: =20
                                    LayoutMinWidth: =25
                                    RadiusBottomLeft: =10
                                    RadiusBottomRight: =10
                                    RadiusTopLeft: =10
                                    RadiusTopRight: =10
                                    Size: =9
                                    Text: =If(ThisItem.ItemCount = 0, "Clear", ThisItem.ItemCount & " item" & If(ThisItem.ItemCount <> 1, "s", ""))
                                    Width: =88
                              - iconDupCheck1:
                                  Control: ModernIcon@1.1.1
                                  Properties:
                                    FillPortions: =0
                                    Height: =18
                                    Icon: ="Checkmark"
                                    IconColor: =RGBA(11, 74, 54, 1)
                                    Visible: =ThisItem.ThursdayDate = varSelectedDuplicateDate
                                    Width: =18
                        - recDupCardHit1:
                            Control: Rectangle@2.3.0
                            Properties:
                              Fill: =RGBA(0, 0, 0, 0)
                              Height: =Parent.Height
                              HoverFill: =RGBA(0, 0, 0, 0.08)
                              OnSelect: =Set(varSelectedDuplicateDate, ThisItem.ThursdayDate)
                              Width: =Parent.Width
            - conDupButtonRow1:
                Control: GroupContainer@1.5.0
                Variant: AutoLayout
                Properties:
                  FillPortions: =0
                  Height: =44
                  LayoutDirection: =LayoutDirection.Horizontal
                  LayoutGap: =12
                  LayoutJustifyContent: =LayoutJustifyContent.SpaceBetween
                  Width: =Parent.Width
                Children:
                  - btnDuplicateCancel1:
                      Control: Classic/Button@2.2.0
                      Properties:
                        FillPortions: =0
                        BorderColor: =ColorFade(Self.Fill, -15%)
                        Color: =RGBA(50, 50, 50, 1)
                        DisabledBorderColor: =RGBA(166, 166, 166, 1)
                        Fill: =RGBA(200, 200, 200, 1)
                        Font: =Font.'Open Sans'
                        HoverBorderColor: =ColorFade(Self.BorderColor, 20%)
                        HoverColor: =RGBA(255, 255, 255, 1)
                        HoverFill: =RGBA(170, 170, 170, 1)
                        OnSelect: =Set(varShowDuplicateModal1, false)
                        PressedBorderColor: =Self.Fill
                        PressedColor: =Self.Fill
                        PressedFill: =Self.Color
                        RadiusBottomLeft: =4
                        RadiusBottomRight: =4
                        RadiusTopLeft: =4
                        RadiusTopRight: =4
                        Text: ="Cancel"
                        Width: =140
                  - btnDuplicateConfirm1:
                      Control: Classic/Button@2.2.0
                      Properties:
                        FillPortions: =0
                        BorderColor: =ColorFade(Self.Fill, -15%)
                        Color: =RGBA(255, 255, 255, 1)
                        DisabledBorderColor: =RGBA(166, 166, 166, 1)
                        DisplayMode: =If(varDuplicating || IsBlank(varSelectedDuplicateDate), DisplayMode.Disabled, DisplayMode.Edit)
                        Fill: =RGBA(11, 74, 54, 1)
                        Font: =Font.'Open Sans'
                        HoverBorderColor: =ColorFade(Self.BorderColor, 20%)
                        HoverColor: =RGBA(255, 255, 255, 1)
                        HoverFill: =RGBA(9, 60, 44, 1)
                        OnSelect: |-
                          =Set(varDuplicating, true);
                          Set(
                              varNewDuplicate,
                              Patch(
                                  'Policy Proof Tracker',
                                  Defaults('Policy Proof Tracker'),
                                  {
                                      Title: varSelectedRelease.Title,
                                      'Document Type': varSelectedRelease.'Document Type',
                                      'Item summary': varSelectedRelease.'Item summary',
                                      Owner: varSelectedRelease.Owner,
                                      Audience: varSelectedRelease.Audience,
                                      'External consultation details': varSelectedRelease.'External consultation details',
                                      'External consultation required': varSelectedRelease.'External consultation required',
                                      Remarks: varSelectedRelease.Remarks,
                                      'Title for Newsletter': varSelectedRelease.'Title for Newsletter',
                                      'High Priority': varSelectedRelease.'High Priority',
                                      'Reason for High Priority': varSelectedRelease.'Reason for High Priority',
                                      'Top Item': varSelectedRelease.'Top Item',
                                      'Planned Publish Date': varSelectedDuplicateDate,
                                      Published: false,
                                      'Published Date': Blank(),
                                      'Approved by Pillar Lead (Ready to Release)': false,
                                      'Approved For Release By': Blank(),
                                      EmailSent: false
                                  }
                              )
                          );
                          Set(varDuplicating, false);
                          If(
                              IsEmpty(Errors('Policy Proof Tracker', varNewDuplicate)),
                              Set(varShowDuplicateModal1, false);
                              ClearCollect(colUnpublishedPolicies, Filter('Policy Proof Tracker', Published = false));
                              Notify(
                                  "Duplicated to " & LookUp(colThursdays, ThursdayDate = varSelectedDuplicateDate).ThursdayLabel & ". Find it on the main screen.",
                                  NotificationType.Success
                              ),
                              Notify(
                                  "Error: " & First(Errors('Policy Proof Tracker', varNewDuplicate)).Message,
                                  NotificationType.Error
                              )
                          )
                        PressedBorderColor: =Self.Fill
                        PressedColor: =Self.Fill
                        PressedFill: =Self.Color
                        RadiusBottomLeft: =4
                        RadiusBottomRight: =4
                        RadiusTopLeft: =4
                        RadiusTopRight: =4
                        Text: ="Duplicate"
                        Width: =140
Every control in this section states FillPortions explicitly wherever its parent is Variant: AutoLayout and it has its own Height/Width — four of them (conDupTextCol1, pillDupEarliestTag1, lblDupDate1, iconDupCheck1) were initially left matching your tweaked ThursdayPickerModal1 exactly, which doesn't set it on those same four, but the mandatory linter on this repo treats the omission as an error regardless of precedent, so all four now have FillPortions: =0 added. Doesn't change what they do — none of the four were ever meant to stretch — just makes it explicit instead of relying on default behaviour.
Test: open an existing item, click Duplicate. The earliest available Thursday should be pre-selected (green ring) with no clicking required. Item counts should show on each card. Clicking a different card should move the selection without closing the modal. Cancel should close with no changes. Duplicate should create the copy on the chosen date with the same success/error notification as before.