@gjsify/adwaita-core 0.53.0 → 0.55.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.
- package/lib/esm/box-selection.js +1 -0
- package/lib/esm/breakpoint-driver.js +1 -0
- package/lib/esm/calendar.js +1 -0
- package/lib/esm/conformance/box-selection.js +1 -0
- package/lib/esm/conformance/calendar.js +1 -0
- package/lib/esm/conformance/constructs.js +2 -0
- package/lib/esm/conformance/grid-navigation.js +1 -0
- package/lib/esm/conformance/index.js +1 -1
- package/lib/esm/conformance/list-view.js +1 -0
- package/lib/esm/conformance/tab-view.js +1 -1
- package/lib/esm/conformance/tree-expander.js +1 -0
- package/lib/esm/conformance/view-switcher.js +1 -1
- package/lib/esm/grid-navigation.js +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/list-view.js +1 -0
- package/lib/esm/tab-view.js +1 -1
- package/lib/esm/tokens.generated.js +1 -1
- package/lib/esm/tree-expander.js +1 -0
- package/lib/esm/view-stack.js +1 -1
- package/lib/esm/view-switcher.js +1 -1
- package/lib/types/box-selection.d.ts +104 -0
- package/lib/types/box-selection.spec.d.ts +2 -0
- package/lib/types/breakpoint-driver.d.ts +31 -0
- package/lib/types/breakpoint-driver.spec.d.ts +2 -0
- package/lib/types/calendar.d.ts +142 -0
- package/lib/types/calendar.spec.d.ts +2 -0
- package/lib/types/conformance/box-selection.d.ts +47 -0
- package/lib/types/conformance/breakpoint-bin.d.ts +11 -8
- package/lib/types/conformance/calendar.d.ts +71 -0
- package/lib/types/conformance/constructs.d.ts +86 -0
- package/lib/types/conformance/grid-navigation.d.ts +12 -0
- package/lib/types/conformance/index.d.ts +16 -4
- package/lib/types/conformance/list-view.d.ts +56 -0
- package/lib/types/conformance/shared-trees.d.ts +70 -0
- package/lib/types/conformance/tab-view.d.ts +29 -0
- package/lib/types/conformance/tree-expander.d.ts +29 -0
- package/lib/types/conformance/view-switcher.d.ts +25 -0
- package/lib/types/constructs.spec.d.ts +2 -0
- package/lib/types/grid-navigation.d.ts +11 -0
- package/lib/types/grid-navigation.spec.d.ts +2 -0
- package/lib/types/index.d.ts +14 -3
- package/lib/types/list-view.d.ts +276 -0
- package/lib/types/list-view.spec.d.ts +2 -0
- package/lib/types/sidebar.d.ts +9 -0
- package/lib/types/tab-view.d.ts +27 -0
- package/lib/types/tree-expander.d.ts +83 -0
- package/lib/types/tree-expander.spec.d.ts +2 -0
- package/lib/types/view-stack.d.ts +11 -0
- package/lib/types/view-switcher.d.ts +28 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";const e=new Set([`none`,`single`,`browse`,`multiple`]);function normalizeBoxSelectionMode(t){return typeof t==`string`&&e.has(t)?t:`single`}function normalize(e,t){let n=new Set;for(let r of e)Number.isInteger(r)&&r>=0&&r<t&&n.add(r);return[...n].sort((e,t)=>e-t)}function spanBetween(e,t,n){let r=Math.max(0,Math.min(e,t)),i=Math.min(n-1,Math.max(e,t)),a=[];for(let e=r;e<=i;e++)a.push(e);return a}function isLiveAnchor(e,t){return Number.isInteger(e)&&e>=0&&e<t}function listBoxSelect(e,t,n,r,i,a={},o=!0){let s=normalize(e,r),unchanged=()=>({selection:s,anchor:t});if(i===`none`||!o||!Number.isInteger(n)||n<0||n>=r)return unchanged();let c=new Set(s);if(i===`browse`)return{selection:[n],anchor:n};if(i===`single`){let e=c.has(n);return{selection:a.modify===!0&&e?[]:[n],anchor:a.modify===!0&&e?-1:n}}return a.extend===!0?isLiveAnchor(t,r)?{selection:spanBetween(t,n,r),anchor:t}:{selection:[n],anchor:n}:a.modify===!0?(c.has(n)?c.delete(n):c.add(n),{selection:normalize(c,r),anchor:t}):{selection:[n],anchor:n}}function listBoxSelectRow(e,t,n,r,i,a=!0){let o=normalize(e,r);return i===`none`?{selection:o,anchor:t}:n===null?{selection:[],anchor:-1}:!a||!Number.isInteger(n)||n<0||n>=r||o.includes(n)?{selection:o,anchor:t}:i===`multiple`?{selection:normalize([...o,n],r),anchor:n}:{selection:[n],anchor:n}}function listBoxUnselectRow(e,t,n,r,i){let a=normalize(e,r);return i===`none`||!a.includes(n)?{selection:a,anchor:t}:{selection:i===`multiple`?a.filter(e=>e!==n):[],anchor:t}}function listBoxSelectAll(e,t){return t!==`multiple`||e<=0?null:Array.from({length:e},(e,t)=>t)}function listBoxUnselectAll(e,t){return t===`browse`||t===`none`||e.length===0?null:[]}export{listBoxSelect,listBoxSelectAll,listBoxSelectRow,listBoxUnselectAll,listBoxUnselectRow,normalizeBoxSelectionMode};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{BreakpointBinState as e}from"./breakpoint-bin.js";function createBreakpointDriver(t,n){let r=new e;for(let e of t)r.add({condition:e.condition,setters:e.setters.map(e=>({...e,originalValue:n.read(e.object,e.property)}))});return{evaluate(e){let t=r.evaluate(e);if(t!==null)for(let e of t.writes)n.write(e.object,e.property,e.value)},get current(){return r.current}}}export{createBreakpointDriver};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{glibClamp as e}from"./glib.js";const t=1,n=9999;function calendarIsLeapYear(e){return e%4==0&&e%100!=0||e%400==0}function calendarDaysInMonth(t,n){let r=e(Math.trunc(n),1,12);return r===2?calendarIsLeapYear(t)?29:28:[0,31,28,31,30,31,30,31,31,30,31,30,31][r]}function calendarWeekStart(e,t){let n=(t+e-1)%7;return n<0||n>6?0:n}function calendarDays(t,r,i){let a=e(Math.trunc(r),1,12),o=e(Math.trunc(t),1,n),s=e(Math.trunc(i),0,6),c=calendarDaysInMonth(o,a),l=a===1?12:a-1,u=a===1?o-1:o,d=calendarDaysInMonth(u,l),f=(weekdayOfWeek(o,a,1)-s+7)%7;f===0&&(f=7);let p=[],m=d-f+1;for(let e=0;e<f;e++)p.push({date:{year:u,month:l,day:m},month:`previous`}),m+=1;let h=Math.trunc(f/7),g=f%7;for(let e=1;e<=c;e++)p.push({date:{year:o,month:a,day:e},month:`current`}),g+=1,g===7&&(h+=1,g=0);m=1;let _=a===12?1:a+1,v=a===12?o+1:o;for(;h<=5;h++){for(;g<=6;g++)p.push({date:{year:v,month:_,day:m},month:`next`}),m+=1;g=0}return p}function weekdayOfWeek(e,t,n){return((daysFromCivil(e,t,n)+4)%7+7)%7}function daysFromCivil(e,t,n){let r=t<=2?e-1:e,i=Math.floor((r>=0?r:r-399)/400),a=r-i*400,o=Math.floor((153*(t+(t>2?-3:9))+2)/5)+n-1,s=a*365+Math.floor(a/4)-Math.floor(a/100)+o;return i*146097+s-719468}function civilFromDays(e){let t=e+719468,n=Math.floor((t>=0?t:t-146096)/146097),r=t-n*146097,i=Math.floor((r-Math.floor(r/1460)+Math.floor(r/36524)-Math.floor(r/146096))/365),a=i+n*400,o=r-(365*i+Math.floor(i/4)-Math.floor(i/100)),s=Math.floor((5*o+2)/153),c=o-Math.floor((153*s+2)/5)+1,l=s+(s<10?3:-9);return{year:a+ +(l<=2),month:l,day:c}}function calendarWeekNumber(t){let r=e(Math.trunc(t.year),1,n),i=e(Math.trunc(t.month),1,12),a=e(Math.trunc(t.day),1,calendarDaysInMonth(r,i)),o=thursdayOfWeek(daysFromCivil(r,i,a),weekdayOfWeek(r,i,a)),s=civilFromDays(o).year;return 1+Math.round((o-thursdayOfJanuaryFirst(s))/7)}function thursdayOfWeek(e,t){return e-(t+6)%7+3}function thursdayOfJanuaryFirst(e){return thursdayOfWeek(daysFromCivil(e,1,4),weekdayOfWeek(e,1,4))}function calendarNavigationButtons(t){let r=e(Math.trunc(t.year),1,n),i=e(Math.trunc(t.month),1,12),a=r===1,o=r===n;return{previousMonth:!a||i!==1,nextMonth:!o||i!==12,previousYear:!a,nextYear:!o}}function calendarStep(t,r){let i=e(Math.trunc(t.year),1,n),a=e(Math.trunc(t.month),1,12),o=e(Math.trunc(t.day),1,calendarDaysInMonth(i,a));if(r===`previous-year`||r===`next-year`){let t=i+(r===`next-year`?1:-1);return{year:e(t,1,n),month:a,day:Math.min(o,calendarDaysInMonth(t,a))}}let s=r===`next-month`?1:-1,c=e(i*12+(a-1)+s,12,119999),l=Math.floor(c/12),u=c%12+1;return{year:l,month:u,day:Math.min(o,calendarDaysInMonth(l,u))}}function calendarSelectDay(t,r,i=!0){let a=e(Math.trunc(r.year),1,n),o=e(Math.trunc(r.month),1,12),s={year:a,month:o,day:e(Math.trunc(r.day),1,calendarDaysInMonth(a,o))},c=t.day!==s.day;return{date:s,dayChanged:c,monthChanged:t.month!==s.month,yearChanged:t.year!==s.year,emitDaySignal:i&&c}}const r=1,i=31;function calendarMarkDay(e,t,n){let r=Math.trunc(t);if(r<1||r>31||e[r-1]===!0===n)return e;let i=e.slice();return i[r-1]=n,i}function calendarDayIsMarked(e,t){let n=Math.trunc(t);return n<1||n>31?!1:e[n-1]===!0}function calendarClearMarks(){return Array.from({length:31},()=>!1)}export{i as CALENDAR_MARK_MAX,r as CALENDAR_MARK_MIN,n as CALENDAR_YEAR_MAX,t as CALENDAR_YEAR_MIN,calendarClearMarks,calendarDayIsMarked,calendarDays,calendarDaysInMonth,calendarIsLeapYear,calendarMarkDay,calendarNavigationButtons,calendarSelectDay,calendarStep,calendarWeekNumber,calendarWeekStart};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=[{rule:`a plain click in single mode replaces the selection and moves the anchor`,selection:[1],anchor:1,position:3,length:5,mode:`single`,step:{},expected:{selection:[3],anchor:3}},{rule:`Ctrl+click on the selected row in single mode clears the selection`,selection:[2],anchor:2,position:2,length:5,mode:`single`,step:{modify:!0},expected:{selection:[],anchor:-1}},{rule:`Ctrl+click on an UNselected row in single mode just selects it`,selection:[0],anchor:0,position:4,length:5,mode:`single`,step:{modify:!0},expected:{selection:[4],anchor:4}},{rule:`browse selects the clicked row and has no toggle at all`,selection:[1],anchor:1,position:1,length:5,mode:`browse`,step:{modify:!0},expected:{selection:[1],anchor:1}},{rule:`none answers every click with no change, anchor included`,selection:[],anchor:-1,position:2,length:5,mode:`none`,step:{},expected:{selection:[],anchor:-1}},{rule:`an unselectable row is ignored, in every mode`,selection:[0],anchor:0,position:2,length:5,mode:`multiple`,step:{selectable:!1},expected:{selection:[0],anchor:0}},{rule:`Shift+click with no anchor selects the clicked row and anchors on it`,selection:[],anchor:-1,position:2,length:6,mode:`multiple`,step:{extend:!0},expected:{selection:[2],anchor:2}},{rule:`Shift+click from an anchor selects the span and keeps the anchor`,selection:[],anchor:1,position:4,length:6,mode:`multiple`,step:{extend:!0},expected:{selection:[1,2,3,4],anchor:1}},{rule:`a backwards Shift+click selects the span in order`,selection:[3,4],anchor:4,position:1,length:6,mode:`multiple`,step:{extend:!0},expected:{selection:[1,2,3,4],anchor:4}},{rule:`Shift+click in single mode falls through to the plain path`,selection:[1],anchor:1,position:3,length:6,mode:`single`,step:{extend:!0},expected:{selection:[3],anchor:3}},{rule:`Ctrl+click in multiple mode toggles one row and keeps the anchor`,selection:[0,3],anchor:3,position:1,length:5,mode:`multiple`,step:{modify:!0},expected:{selection:[0,1,3],anchor:3}},{rule:`Ctrl+click on a selected row in multiple mode removes only that row`,selection:[0,1,3],anchor:3,position:1,length:5,mode:`multiple`,step:{modify:!0},expected:{selection:[0,3],anchor:3}},{rule:`a plain click in multiple mode replaces the selection outright`,selection:[0,1,2],anchor:2,position:4,length:5,mode:`multiple`,step:{},expected:{selection:[4],anchor:4}},{rule:`a click past the end of the box is ignored`,selection:[1],anchor:1,position:9,length:5,mode:`single`,step:{},expected:{selection:[1],anchor:1}},{rule:`a click on a negative index is ignored`,selection:[1],anchor:1,position:-1,length:5,mode:`multiple`,step:{},expected:{selection:[1],anchor:1}}],t=[{rule:`select_row on the already-selected row changes nothing`,op:`select`,selection:[2],anchor:2,position:2,length:5,mode:`single`,step:{},expected:{selection:[2],anchor:2}},{rule:`select_row replaces the selection and moves the anchor`,op:`select`,selection:[0],anchor:0,position:3,length:5,mode:`single`,step:{},expected:{selection:[3],anchor:3}},{rule:`select_row in multiple mode ADDS to the selection and moves the anchor`,op:`select`,selection:[0,3],anchor:3,position:1,length:5,mode:`multiple`,step:{},expected:{selection:[0,1,3],anchor:1}},{rule:`a null row is the C's unselect-everything, and clears the anchor`,op:`select`,selection:[1,3],anchor:3,position:null,length:5,mode:`multiple`,step:{},expected:{selection:[],anchor:-1}},{rule:`select_row on an unselectable row is ignored`,op:`select`,selection:[0],anchor:0,position:2,length:5,mode:`single`,step:{selectable:!1},expected:{selection:[0],anchor:0}},{rule:`unselect_row in multiple mode removes just that row`,op:`unselect`,selection:[0,2,4],anchor:4,position:2,length:5,mode:`multiple`,step:{},expected:{selection:[0,4],anchor:4}},{rule:`unselect_row in single mode clears the WHOLE box`,op:`unselect`,selection:[1,2],anchor:2,position:1,length:5,mode:`single`,step:{},expected:{selection:[],anchor:2}},{rule:`unselect_row on an unselected row is ignored`,op:`unselect`,selection:[1],anchor:1,position:3,length:5,mode:`multiple`,step:{},expected:{selection:[1],anchor:1}}],n=[{rule:`select-all is refused by every mode but multiple`,op:`select-all`,selection:[],length:4,mode:`single`,expected:null},{rule:`select-all in browse is refused, because browse is not multi`,op:`select-all`,selection:[1],length:4,mode:`browse`,expected:null},{rule:`select-all in multiple selects every row`,op:`select-all`,selection:[0],length:4,mode:`multiple`,expected:[0,1,2,3]},{rule:`select-all on an empty box changes nothing and says nothing`,op:`select-all`,selection:[],length:0,mode:`multiple`,expected:null},{rule:`unselect-all is refused in browse`,op:`unselect-all`,selection:[1,2],length:4,mode:`browse`,expected:null},{rule:`unselect-all on an already-empty selection changes nothing`,op:`unselect-all`,selection:[],length:4,mode:`multiple`,expected:null},{rule:`unselect-all clears the selection in every other mode`,op:`unselect-all`,selection:[0,3],length:4,mode:`multiple`,expected:[]}];export{n as BOX_ALL_VECTORS,t as BOX_ROW_VECTORS,e as BOX_SELECT_VECTORS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";const e=[{rule:`a month that starts mid-week pads the front and fills the grid`,year:2026,month:10,weekStart:1,leading:3,trailing:8,last:`2026-11-08`},{rule:`a 30-day month that starts on Tuesday leaves eleven trailing days`,year:2027,month:6,weekStart:1,leading:1,trailing:11,last:`2027-07-11`},{rule:`a month starting on the first day of the week takes a WHOLE row of blanks`,year:2027,month:2,weekStart:1,leading:7,trailing:7,last:`2027-03-07`},{rule:`a 28-day month under a Sunday-first locale trails 13 days into the next month`,year:2027,month:2,weekStart:0,leading:1,trailing:13,last:`2027-03-13`},{rule:`a leap February that starts mid-week gains exactly the extra cell`,year:2024,month:2,weekStart:1,leading:3,trailing:10,last:`2024-03-10`},{rule:`1900 is not a leap year, so its February is 28 days`,year:1900,month:2,weekStart:1,leading:3,trailing:11,last:`1900-03-11`},{rule:`a December that ends the grid leaves the tail in January`,year:2026,month:12,weekStart:1,leading:1,trailing:10,last:`2027-01-10`},{rule:`January 2026 under a Monday-first locale starts three cells in`,year:2026,month:1,weekStart:1,leading:3,trailing:8,last:`2026-02-08`},{rule:`the same January under a Sunday-first locale starts four cells in`,year:2026,month:1,weekStart:0,leading:4,trailing:7,last:`2026-02-07`}],t=[{rule:`4 January always opens a year's ISO week 1`,date:{year:2026,month:1,day:4},week:1},{rule:`a plain mid-year date is its own week`,date:{year:2026,month:7,day:15},week:29},{rule:`1 January 2021 belongs to week 53 of 2020`,date:{year:2021,month:1,day:1},week:53},{rule:`31 December 2019 belongs to week 1 of 2020`,date:{year:2019,month:12,day:31},week:1},{rule:`a year whose 1 January is a Thursday has 53 weeks`,date:{year:2026,month:12,day:28},week:53},{rule:`the first day of the supported range opens its own week 1`,date:{year:1,month:1,day:1},week:1}],n=[{rule:`31 January plus a month clamps to the end of February`,from:{year:2026,month:1,day:31},step:`next-month`,expected:{year:2026,month:2,day:28}},{rule:`the same walk in a leap year lands on the 29th`,from:{year:2024,month:1,day:31},step:`next-month`,expected:{year:2024,month:2,day:29}},{rule:`31 March minus a month clamps backwards to the 28th`,from:{year:2026,month:3,day:31},step:`previous-month`,expected:{year:2026,month:2,day:28}},{rule:`December plus a month rolls the year over`,from:{year:2026,month:12,day:15},step:`next-month`,expected:{year:2027,month:1,day:15}},{rule:`January minus a month rolls back into the previous December`,from:{year:2027,month:1,day:15},step:`previous-month`,expected:{year:2026,month:12,day:15}},{rule:`29 February plus a year lands on 28 February`,from:{year:2024,month:2,day:29},step:`next-year`,expected:{year:2025,month:2,day:28}},{rule:`a year step keeps the month and the day`,from:{year:2026,month:7,day:15},step:`next-year`,expected:{year:2027,month:7,day:15}},{rule:`stepping off the start of the range stays put`,from:{year:1,month:1,day:1},step:`previous-month`,expected:{year:1,month:1,day:1}},{rule:`stepping off the end of the range stays put`,from:{year:9999,month:12,day:31},step:`next-month`,expected:{year:9999,month:12,day:31}}],r=[{rule:`selecting the date already shown changes nothing at all`,current:{year:2026,month:10,day:2},target:{year:2026,month:10,day:2},emit:!0,expected:{date:{year:2026,month:10,day:2},dayChanged:!1,monthChanged:!1,yearChanged:!1,emitDaySignal:!1}},{rule:`a different day in the same month notifies the day and fires the signal`,current:{year:2026,month:10,day:2},target:{year:2026,month:10,day:9},emit:!0,expected:{date:{year:2026,month:10,day:9},dayChanged:!0,monthChanged:!1,yearChanged:!1,emitDaySignal:!0}},{rule:`a month step notifies the month without firing day-selected`,current:{year:2026,month:10,day:2},target:{year:2026,month:11,day:2},emit:!1,expected:{date:{year:2026,month:11,day:2},dayChanged:!1,monthChanged:!0,yearChanged:!1,emitDaySignal:!1}},{rule:`an out-of-range day is clamped into the target month`,current:{year:2026,month:1,day:31},target:{year:2026,month:2,day:31},emit:!0,expected:{date:{year:2026,month:2,day:28},dayChanged:!0,monthChanged:!0,yearChanged:!1,emitDaySignal:!0}},{rule:`a month step that keeps the day notifies only the month`,current:{year:2026,month:10,day:2},target:{year:2027,month:10,day:2},emit:!1,expected:{date:{year:2027,month:10,day:2},dayChanged:!1,monthChanged:!1,yearChanged:!0,emitDaySignal:!1}}],withDay=e=>{let t=Array.from({length:31},()=>!1);for(let n of e)t[n-1]=!0;return t},i=[{rule:`marking a day sets its slot`,marked:withDay([]),day:14,mark:!0,expected:withDay([14]),changed:!0},{rule:`marking an already-marked day changes nothing`,marked:withDay([14]),day:14,mark:!0,expected:withDay([14]),changed:!1},{rule:`unmarking an unmarked day changes nothing`,marked:withDay([]),day:3,mark:!1,expected:withDay([]),changed:!1},{rule:`day 0 is out of range and ignored, not clamped to day 1`,marked:withDay([1]),day:0,mark:!0,expected:withDay([1]),changed:!1},{rule:`day 32 is out of range and ignored, not clamped to day 31`,marked:withDay([31]),day:32,mark:!0,expected:withDay([31]),changed:!1},{rule:`the two ends of the range are both inside it`,marked:withDay([]),day:31,mark:!0,expected:withDay([31]),changed:!0}],a=[{rule:`mid-range leaves every arrow live`,date:{year:2026,month:10,day:2},expected:{previousMonth:!0,nextMonth:!0,previousYear:!0,nextYear:!0}},{rule:`the first month of the first year kills both backward arrows`,date:{year:1,month:1,day:1},expected:{previousMonth:!1,nextMonth:!0,previousYear:!1,nextYear:!0}},{rule:`the last month of the last year kills both forward arrows`,date:{year:9999,month:12,day:31},expected:{previousMonth:!0,nextMonth:!1,previousYear:!0,nextYear:!1}},{rule:`the first month of a mid-range year keeps the year arrow live`,date:{year:2026,month:1,day:1},expected:{previousMonth:!0,nextMonth:!0,previousYear:!0,nextYear:!0}}];export{e as CALENDAR_DAYS_VECTORS,i as CALENDAR_MARK_VECTORS,a as CALENDAR_NAVIGATION_VECTORS,r as CALENDAR_SELECT_VECTORS,n as CALENDAR_STEP_VECTORS,t as CALENDAR_WEEK_VECTORS};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";import{authoredNodes as e}from"./shared-trees.js";const t=[`layout`,`strings`,`responses`,`page`,`extern`,`signal`,`bind`,`breakpoint`];function constructUsesOf(t){let n=[];for(let{node:r,path:i}of e(t))r.layout!==void 0&&n.push({kind:`layout`,path:i}),r.extensions?.strings!==void 0&&n.push({kind:`strings`,path:i}),r.extensions?.responses!==void 0&&n.push({kind:`responses`,path:i}),r.page!==void 0&&n.push({kind:`page`,path:i}),r.extern===!0&&n.push({kind:`extern`,path:i}),r.signals?.forEach(()=>n.push({kind:`signal`,path:i})),Object.keys(r.bindings??{}).forEach(()=>n.push({kind:`bind`,path:i})),r.breakpoints?.forEach(()=>n.push({kind:`breakpoint`,path:i}));return n}var UnsupportedConstructError=class extends Error{constructor(e,t){let n=t.map(e=>` ${e.kind} at ${e.path} — ${e.reason}`).join(`
|
|
2
|
+
`);super(`this tree cannot be rendered by ${e}: ${t.length} construct(s) it refuses.\n${n}`),this.name=`UnsupportedConstructError`,this.renderer=e,this.refused=t}};function assertTreeConstructs(e,t,n){let r=[];for(let i of constructUsesOf(n)){let n=t[i.kind];if(n===void 0)throw Error(`${e}'s capabilities declare no row for the construct '${i.kind}'.`);n!==`implemented`&&r.push({...i,reason:n.refused})}if(r.length>0)throw new UnsupportedConstructError(e,r)}const n=[{kind:`layout`,rule:"`layout { }` places a grid child in its cell (ADR 0092); the spans default to one",tree:{tag:`GtkGrid`,children:[{tag:`GtkLabel`,id:`a`,layout:{row:0,column:0}},{tag:`GtkLabel`,id:`b`,layout:{row:1,column:1,"column-span":2}}]},shows:[{row:0,column:0,columnSpan:1},{row:1,column:1,columnSpan:2}]},{kind:`strings`,rule:"`strings [ ]` fills a combo row model in source order (ADR 0072)",tree:{tag:`AdwComboRow`,props:{title:`Colour`},children:[{tag:`GtkStringList`,slot:`model`,extensions:{strings:[{value:`Blue`},{value:`Teal`},{value:`Green`}]}}]},shows:[`Blue`,`Teal`,`Green`]},{kind:`responses`,rule:"`responses [ ]` registers each response with its appearance and enabled state (ADR 0072)",tree:{tag:`AdwAlertDialog`,props:{heading:`Delete?`},extensions:{responses:[{id:`cancel`,label:`Cancel`},{id:`delete`,label:`Delete`,appearance:`destructive`,enabled:!1}]}},shows:[{id:`cancel`,label:`Cancel`,appearance:`default`,enabled:!0},{id:`delete`,label:`Delete`,appearance:`destructive`,enabled:!1}]},{kind:`page`,rule:"a stack child with a `page` is a page with that name and title",tree:{tag:`GtkStack`,children:[{tag:`GtkLabel`,props:{label:`x`},page:{name:`first`,label:`First`}}]},shows:[{name:`first`,title:`First`}]},{kind:`extern`,rule:"an `extern` node is built by the class the application registered under its name (ADR 0093)",tree:{tag:`GtkBox`,children:[{tag:`CorpusExtern`,id:`registered`,extern:!0}]},shows:[{id:`registered`,builtByRegisteredClass:!0}]},{kind:`signal`,rule:"a handler bound with `clicked => $onClicked()` runs, from the scope the builder was handed, once per emission (ADR 0093)",tree:{tag:`GtkBox`,children:[{tag:`GtkButton`,id:`pressed`,signals:[{name:`clicked`,handler:`onClicked`}]}]},shows:[{handler:`onClicked`,calls:1}]},{kind:`bind`,rule:"a `bind` makes the target follow the source, once at creation and again on every change (ADR 0093)",tree:{tag:`GtkBox`,children:[{tag:`GtkToggleButton`,id:`source`},{tag:`GtkToggleButton`,id:`target`,bindings:{active:{source:`source`,property:`active`}}}]},shows:{afterBuild:!1,afterSourceOn:!0}},{kind:`breakpoint`,rule:"a `breakpoint` writes its setters while its condition holds for the parent, and restores them after (ADR 0093)",tree:{tag:`GtkBox`,children:[{tag:`GtkLabel`,id:`caption`,props:{label:`wide`}}],breakpoints:[{condition:`max-width: 400px`,setters:[{object:`caption`,property:`label`,value:`narrow`}]}]},shows:[`wide`,`narrow`,`wide`]}],r=[{width:800,height:600},{width:300,height:600},{width:800,height:600}],i=`CorpusExtern`;async function driveConstructVectors(e,n){let{describe:r,it:i,expect:a}=n;await r(`${e.name}: template constructs (ADR 0093)`,async()=>{await i(`declares a row for every construct kind, and no other`,()=>{a(Object.keys(e.capabilities).sort().join()).toBe([...t].sort().join())});for(let n of t){let t=e.capabilities[n],r=e.vectors.filter(e=>e.kind===n);if(t===`implemented`){await i(`${n}: a claim has at least one vector`,()=>{a(r.length>0).toBe(!0)});for(let t of r)await i(`${n} is built: ${t.rule}`,()=>{a(JSON.stringify(e.observe(t))).toBe(JSON.stringify(t.shows))});continue}for(let t of r)await i(`${n} is refused by name: ${t.rule}`,()=>{let r;try{e.observe(t)}catch(e){r=e}a(r instanceof UnsupportedConstructError).toBe(!0),a(r instanceof UnsupportedConstructError&&r.refused.some(e=>e.kind===n)).toBe(!0)})}})}export{r as BREAKPOINT_VECTOR_SIZES,t as CONSTRUCT_KINDS,n as CONSTRUCT_VECTORS,i as EXTERN_VECTOR_CLASS,UnsupportedConstructError,assertTreeConstructs,constructUsesOf,driveConstructVectors};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={count:7,columns:3},t=[{key:`ArrowRight`,from:1,to:2},{key:`ArrowLeft`,from:1,to:0},{key:`ArrowRight`,from:2,to:3},{key:`ArrowLeft`,from:0,to:null},{key:`ArrowRight`,from:6,to:null},{key:`ArrowDown`,from:1,to:4},{key:`ArrowUp`,from:4,to:1},{key:`ArrowUp`,from:2,to:null},{key:`ArrowDown`,from:4,to:null},{key:`ArrowDown`,from:6,to:null},{key:`Home`,from:5,to:0},{key:`Home`,from:0,to:null},{key:`End`,from:1,to:6},{key:`End`,from:6,to:null}];export{e as GRID_NAVIGATION_GEOMETRY,t as GRID_NAVIGATION_VECTORS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ABOUT_DIALOG_CREDITS_LEGAL_VECTORS as e,ABOUT_DIALOG_DETAILS_VECTORS as t,ABOUT_DIALOG_HEADER_VECTORS as n,ABOUT_DIALOG_LABEL_VECTORS as r,ABOUT_DIALOG_SUPPORT_VECTORS as i,CREDITS_SECTIONS_VECTORS as a,CREDIT_PERSON_VECTORS as o,LEGAL_SECTION_VECTORS as s,LICENSE_INFO_VECTORS as c,LICENSE_SETTER_VECTORS as l,LICENSE_SPDX_VECTORS as u,LICENSE_TEXT_VECTORS as d,TRANSLATOR_CREDITS_VECTORS as f}from"./about-dialog.js";import{ACCENT_COLOR_VECTORS as p,NEAREST_ACCENT_VECTORS as m}from"./accent.js";import{ACTION_ROW_ACTIVATION_VECTORS as h,BUTTON_ROW_ACTIVATABLE_VECTORS as g,BUTTON_ROW_ICON_VECTORS as _,LABEL_VISIBILITY_VECTORS as v,SWITCH_ROW_NOTIFY_VECTORS as y,WINDOW_TITLE_VECTORS as b}from"./action-row.js";import{ADJUSTMENT_AUTHORED_VECTORS as x,ADJUSTMENT_PARSE_VECTORS as S,ADJUSTMENT_SNAP_VECTORS as C}from"./adjustment.js";import{APPEARANCE_HANDOFF_VECTORS as w}from"./appearance.js";import{AVATAR_COLOR_VECTORS as T,AVATAR_FONT_SIZE_VECTORS as E,AVATAR_ICON_SIZE_VECTORS as D,AVATAR_INITIALS_VECTORS as O,AVATAR_MODE_VECTORS as k}from"./avatar.js";import{BANNER_BUTTON_STYLE_PARSE_VECTORS as A,BANNER_BUTTON_STYLE_VECTORS as j,BANNER_BUTTON_TEXT_VECTORS as M,BANNER_BUTTON_VISIBLE_VECTORS as N,BANNER_DEFAULT_VECTORS as P}from"./banner.js";import{BOX_ORIENTATION_VECTORS as F,BOX_SPACING_VECTORS as I}from"./box.js";import{BREAKPOINT_PICK_VECTORS as L,BREAKPOINT_TRANSITION_VECTORS as R}from"./breakpoint-bin.js";import{BUTTON_CONTENT_DEFAULT_VECTORS as z,BUTTON_CONTENT_ELLIPSIZE_VECTORS as B,BUTTON_CONTENT_ICON_VECTORS as V,BUTTON_CONTENT_LABEL_VECTORS as H,BUTTON_CONTENT_STYLE_TARGET_VECTORS as U,BUTTON_CONTENT_TEXT_VECTORS as W}from"./button-content.js";import{BUTTON_STYLE_CLASS_VECTORS as G}from"./button.js";import{CAROUSEL_CLAMP_VECTORS as K,CAROUSEL_NAVIGATE_VECTORS as q,CAROUSEL_PAGE_ALLOCATION_VECTORS as J,CAROUSEL_PAGE_AT_POSITION_VECTORS as Y,CAROUSEL_PAGE_LIST_VECTORS as X,CAROUSEL_PROPERTY_DEFAULT_VECTORS as Z,CAROUSEL_RANGE_VECTORS as Q,CAROUSEL_REORDER_SHIFT_VECTORS as $,CAROUSEL_REVEAL_VECTORS as ee,CAROUSEL_SIZES_FROM_SNAP_POINTS_VECTORS as te,CAROUSEL_SNAP_POINT_VECTORS as ne,CAROUSEL_WHEEL_LOCKOUT_VECTORS as re,CAROUSEL_WHEEL_VECTORS as ie}from"./carousel.js";import{RADIO_GROUP_VECTORS as ae}from"./checks.js";import{CLAMP_ALLOCATE_VECTORS as oe,CLAMP_CHILD_SIZE_VECTORS as se,CLAMP_PROPERTY_VECTORS as ce,CLAMP_SIZE_FROM_CHILD_VECTORS as le,CLAMP_THRESHOLD_VECTORS as ue,SPINNER_GEOMETRY_VECTORS as de,SPINNER_SIZE_VECTORS as fe,TOOLBAR_VIEW_ALLOCATE_VECTORS as pe,TOOLBAR_VIEW_CLASS_VECTORS as me,TOOLBAR_VIEW_CONTENT_FOR_SIZE_VECTORS as he,TOOLBAR_VIEW_MEASURE_VECTORS as ge}from"./chrome.js";import{DATA_GRID_CELL_TEXT_VECTORS as _e,DATA_GRID_COLUMN_CLASS_VECTORS as ve,DATA_GRID_COLUMN_NORMALIZE_VECTORS as ye,DATA_GRID_INTERACTIVE_VECTORS as be,DATA_GRID_TRACK_VECTORS as xe,DATA_GRID_VARIANT_VECTORS as Se}from"./data-grid.js";import{BOTTOM_SHEET_BOTTOM_BAR_VECTORS as Ce,BOTTOM_SHEET_CLOSE_VECTORS as we,BOTTOM_SHEET_OPEN_VECTORS as Te,BOTTOM_SHEET_PRESENTATION_VECTORS as Ee,BOTTOM_SHEET_SWIPE_TRACKER_VECTORS as De,runBottomSheetBottomBarSteps as Oe,runBottomSheetSteps as ke}from"./dialog.js";import{ENTRY_MAX_LENGTH_VECTORS as Ae,ENTRY_ROW_ACTIVATION_VECTORS as je,ENTRY_ROW_GUARD_VECTORS as Me,ENTRY_ROW_STATE_VECTORS as Ne,ENTRY_TEXT_LENGTH_VECTORS as Pe,PASSWORD_ENTRY_ROW_VECTORS as Fe,PASSWORD_REVEAL_GUARD_VECTORS as Ie}from"./entry-row.js";import{HEADER_BAR_PACK_VECTORS as Le,HEADER_BAR_TITLE_SOURCE_VECTORS as Re,HEADER_BAR_TITLE_WIDGET_VECTORS as ze}from"./header-bar.js";import{COMBO_CHOOSER_VECTORS as Be,COMBO_SELECTION_VECTORS as Ve,TOGGLE_ACTIVE_NAME_VECTORS as He}from"./rows.js";import{VIEW_STACK_ICON_NAME_VECTORS as Ue,VIEW_STACK_PAGE_VECTORS as We,VIEW_STACK_VECTORS as Ge}from"./view-stack.js";import{NAVIGATION_VIEW_VECTORS as Ke,collectNavigationState as qe,navigationEventLog as Je,runNavigationSteps as Ye}from"./navigation-view.js";import{SIDEBAR_ACTIVATION_VECTORS as Xe,SIDEBAR_CLAMP_VECTORS as Ze,SIDEBAR_FILTER_VECTORS as Qe,SIDEBAR_ITEMS_CHANGED_VECTORS as $e,SIDEBAR_ITEM_FLAG_VECTORS as et,SIDEBAR_MODEL_VECTORS as tt,SIDEBAR_MODE_VECTORS as nt}from"./sidebar.js";import{ADW_LENGTH_UNIT_VECTORS as rt,GLIB_CLAMP_VECTORS as it,NATURAL_SIDEBAR_WIDTH_VECTORS as at,NAVIGATION_ACTION_VECTORS as ot,NAVIGATION_SPLIT_VIEW_LAYOUT_VECTORS as st,NAVIGATION_STACK_VECTORS as ct,OVERLAY_COLLAPSE_VECTORS as lt,OVERLAY_SPLIT_VIEW_LAYOUT_VECTORS as ut,OVERLAY_SWIPE_AREA_VECTORS as dt,OVERLAY_SWIPE_CANCEL_VECTORS as ft,OVERLAY_SWIPE_RELEASE_VECTORS as pt,OVERLAY_SWIPE_SNAP_POINT_VECTORS as mt,OVERLAY_SWIPE_START_VECTORS as ht,SIDEBAR_BOUNDS_VECTORS as gt,SIDEBAR_WIDTH_VECTORS as _t,SPLIT_VIEW_MEASURE_VECTORS as vt,TAGS_CONFLICT_VECTORS as yt}from"./split-view.js";import{MENU_BUTTON_DIRECTION_VECTORS as bt,SPLIT_BUTTON_CONTENT_VECTORS as xt,SPLIT_BUTTON_DIRECTION_VECTORS as St,SPLIT_BUTTON_DROPDOWN_VECTORS as Ct,SPLIT_BUTTON_MENU_ACTIVATION_VECTORS as wt,SPLIT_BUTTON_ROOT_STATE_VECTORS as Tt,SPLIT_BUTTON_STYLE_CLASS_VECTORS as Et,SPLIT_BUTTON_TOOLTIP_VECTORS as Dt}from"./split-button.js";import{LIST_ITEMS_CHANGED_VECTORS as Ot,LIST_MODEL_OWNERSHIP_VECTORS as kt,LIST_NORMALIZE_VECTORS as At,LIST_PARSE_VECTORS as jt,LIST_SELECTION_CLAMP_VECTORS as Mt,TAB_PAGES_ITEMS_CHANGED_VECTORS as Nt,applyListReadback as Pt,replayTabPagesAsSplices as Ft}from"./list.js";import{MENU_DETAILED_ACTION_VECTORS as It,MENU_FLATTEN_VECTORS as Lt,MENU_ITEM_STATE_VECTORS as Rt,MENU_NORMALIZE_VECTORS as zt,MENU_PARSE_VECTORS as Bt,MENU_REFUSAL_VECTORS as Vt}from"./menu.js";import{INLINE_TOGGLE_VECTORS as Ht,INLINE_TOOLTIP_VECTORS as Ut,VIEW_SWITCHER_BADGE_VECTORS as Wt,VIEW_SWITCHER_BAR_REVEAL_VECTORS as Gt,VIEW_SWITCHER_BAR_VECTORS as Kt,VIEW_SWITCHER_BUTTON_VECTORS as qt,VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS as Jt,VIEW_SWITCHER_DRAG_VECTORS as Yt,VIEW_SWITCHER_ICON_VECTORS as Xt,VIEW_SWITCHER_MNEMONIC_VECTORS as Zt,VIEW_SWITCHER_REBUILD_VECTORS as Qt,VIEW_SWITCHER_SELECTION_VECTORS as $t,createViewSwitcherClock as en}from"./view-switcher.js";import{TABS_REVEALED_VECTORS as tn,TAB_CLOSE_VISIBLE_VECTORS as nn,TAB_DESCENDANT_VECTORS as rn,TAB_ICON_STATE_VECTORS as an,TAB_PAGE_DESCRIPTOR_VECTORS as on,TAB_SUCCESSOR_VECTORS as sn,TAB_TOOLTIP_VECTORS as cn,TAB_VIEW_VECTORS as ln,applyTabViewOp as un,seedTabViewPages as dn,tabViewClosing as fn,tabViewOrder as pn}from"./tab-view.js";import{CASE_FOLD_VECTORS as mn,MAKE_COMPARABLE_VECTORS as hn,PREFERENCES_GROUP_HEADER_VECTORS as gn,PREFERENCES_SEARCH_PAGES as _n,PREFERENCES_SEARCH_VECTORS as vn,ROW_MATCH_VECTORS as yn,SEARCH_CORPUS_VECTORS as bn,SEARCH_ROW_SUBTITLE_VECTORS as xn,STRIP_MARKUP_VECTORS as Sn,STRIP_MNEMONIC_VECTORS as Cn}from"./preferences.js";import{POPOVER_KEY_VECTORS as wn,POPOVER_SURFACE_VECTORS as Tn}from"./popover.js";import{SHORTCUT_LABEL_VECTORS as En,formatShortcutLabelNodes as Dn}from"./shortcut-label.js";import{SPINNER_ARC_ENVELOPE as On,SPINNER_ARC_PHASE_VECTORS as kn,SPINNER_ARC_TOLERANCE as An,SPINNER_CONSTANT_VECTORS as jn}from"./spinner.js";import{LABEL_CHAR_COUNT_VECTORS as Mn,LABEL_DISPLAY_TEXT_VECTORS as Nn,LABEL_EFFECTIVE_LINES_VECTORS as Pn,LABEL_ELLIPSIZE_OVERFLOW_VECTORS as Fn,LABEL_ELLIPSIZE_VECTORS as In,LABEL_JUSTIFY_VECTORS as Ln,LABEL_WIDTH_CHARS_EXTENT_VECTORS as Rn,LABEL_WRAP_MODE_VECTORS as zn,LABEL_XALIGN_VECTORS as Bn,LABEL_YALIGN_ALIGN_ITEMS_VECTORS as Vn,LABEL_YALIGN_VECTORS as Hn}from"./label.js";import{WRAP_BOX_CHILD_ORDER_VECTORS as Un,WRAP_BOX_LENGTH_VECTORS as Wn,WRAP_BOX_LINE_VECTORS as Gn,WRAP_BOX_NATURAL_LENGTH_VECTORS as Kn,WRAP_BOX_NOTIFY_PROPERTIES as qn,WRAP_BOX_POLICY_VECTORS as Jn,WRAP_BOX_SPACING_NOTIFY_VECTORS as Yn,WRAP_BOX_SPACING_VECTORS as Xn}from"./wrap-box.js";import{ATTRIBUTE_OF_VECTORS as Zn,HOST_TAG_VECTORS as Qn,PROPERTY_OF_VECTORS as $n}from"./tags.js";import{VALUE_LIST_VECTORS as er}from"./value-lists.js";import{SHARED_TREE_BLOCKS_WITHOUT_EXPECTATIONS as tr,SHARED_TREE_TABLES as nr,authoredNodes as rr,authoredTags as ir,reachedTables as ar,sharedTreeExpectations as or,sharedTreePlacements as sr,subjectIndexOf as cr,withoutPlacements as lr}from"./shared-trees.js";export{e as ABOUT_DIALOG_CREDITS_LEGAL_VECTORS,t as ABOUT_DIALOG_DETAILS_VECTORS,n as ABOUT_DIALOG_HEADER_VECTORS,r as ABOUT_DIALOG_LABEL_VECTORS,i as ABOUT_DIALOG_SUPPORT_VECTORS,p as ACCENT_COLOR_VECTORS,h as ACTION_ROW_ACTIVATION_VECTORS,x as ADJUSTMENT_AUTHORED_VECTORS,S as ADJUSTMENT_PARSE_VECTORS,C as ADJUSTMENT_SNAP_VECTORS,rt as ADW_LENGTH_UNIT_VECTORS,w as APPEARANCE_HANDOFF_VECTORS,Zn as ATTRIBUTE_OF_VECTORS,T as AVATAR_COLOR_VECTORS,E as AVATAR_FONT_SIZE_VECTORS,D as AVATAR_ICON_SIZE_VECTORS,O as AVATAR_INITIALS_VECTORS,k as AVATAR_MODE_VECTORS,A as BANNER_BUTTON_STYLE_PARSE_VECTORS,j as BANNER_BUTTON_STYLE_VECTORS,M as BANNER_BUTTON_TEXT_VECTORS,N as BANNER_BUTTON_VISIBLE_VECTORS,P as BANNER_DEFAULT_VECTORS,Ce as BOTTOM_SHEET_BOTTOM_BAR_VECTORS,we as BOTTOM_SHEET_CLOSE_VECTORS,Te as BOTTOM_SHEET_OPEN_VECTORS,Ee as BOTTOM_SHEET_PRESENTATION_VECTORS,De as BOTTOM_SHEET_SWIPE_TRACKER_VECTORS,F as BOX_ORIENTATION_VECTORS,I as BOX_SPACING_VECTORS,L as BREAKPOINT_PICK_VECTORS,R as BREAKPOINT_TRANSITION_VECTORS,z as BUTTON_CONTENT_DEFAULT_VECTORS,B as BUTTON_CONTENT_ELLIPSIZE_VECTORS,V as BUTTON_CONTENT_ICON_VECTORS,H as BUTTON_CONTENT_LABEL_VECTORS,U as BUTTON_CONTENT_STYLE_TARGET_VECTORS,W as BUTTON_CONTENT_TEXT_VECTORS,g as BUTTON_ROW_ACTIVATABLE_VECTORS,_ as BUTTON_ROW_ICON_VECTORS,G as BUTTON_STYLE_CLASS_VECTORS,K as CAROUSEL_CLAMP_VECTORS,q as CAROUSEL_NAVIGATE_VECTORS,J as CAROUSEL_PAGE_ALLOCATION_VECTORS,Y as CAROUSEL_PAGE_AT_POSITION_VECTORS,X as CAROUSEL_PAGE_LIST_VECTORS,Z as CAROUSEL_PROPERTY_DEFAULT_VECTORS,Q as CAROUSEL_RANGE_VECTORS,$ as CAROUSEL_REORDER_SHIFT_VECTORS,ee as CAROUSEL_REVEAL_VECTORS,te as CAROUSEL_SIZES_FROM_SNAP_POINTS_VECTORS,ne as CAROUSEL_SNAP_POINT_VECTORS,re as CAROUSEL_WHEEL_LOCKOUT_VECTORS,ie as CAROUSEL_WHEEL_VECTORS,mn as CASE_FOLD_VECTORS,oe as CLAMP_ALLOCATE_VECTORS,se as CLAMP_CHILD_SIZE_VECTORS,ce as CLAMP_PROPERTY_VECTORS,le as CLAMP_SIZE_FROM_CHILD_VECTORS,ue as CLAMP_THRESHOLD_VECTORS,Be as COMBO_CHOOSER_VECTORS,Ve as COMBO_SELECTION_VECTORS,a as CREDITS_SECTIONS_VECTORS,o as CREDIT_PERSON_VECTORS,_e as DATA_GRID_CELL_TEXT_VECTORS,ve as DATA_GRID_COLUMN_CLASS_VECTORS,ye as DATA_GRID_COLUMN_NORMALIZE_VECTORS,be as DATA_GRID_INTERACTIVE_VECTORS,xe as DATA_GRID_TRACK_VECTORS,Se as DATA_GRID_VARIANT_VECTORS,Ae as ENTRY_MAX_LENGTH_VECTORS,je as ENTRY_ROW_ACTIVATION_VECTORS,Me as ENTRY_ROW_GUARD_VECTORS,Ne as ENTRY_ROW_STATE_VECTORS,Pe as ENTRY_TEXT_LENGTH_VECTORS,it as GLIB_CLAMP_VECTORS,Le as HEADER_BAR_PACK_VECTORS,Re as HEADER_BAR_TITLE_SOURCE_VECTORS,ze as HEADER_BAR_TITLE_WIDGET_VECTORS,Qn as HOST_TAG_VECTORS,Ht as INLINE_TOGGLE_VECTORS,Ut as INLINE_TOOLTIP_VECTORS,Mn as LABEL_CHAR_COUNT_VECTORS,Nn as LABEL_DISPLAY_TEXT_VECTORS,Pn as LABEL_EFFECTIVE_LINES_VECTORS,Fn as LABEL_ELLIPSIZE_OVERFLOW_VECTORS,In as LABEL_ELLIPSIZE_VECTORS,Ln as LABEL_JUSTIFY_VECTORS,v as LABEL_VISIBILITY_VECTORS,Rn as LABEL_WIDTH_CHARS_EXTENT_VECTORS,zn as LABEL_WRAP_MODE_VECTORS,Bn as LABEL_XALIGN_VECTORS,Vn as LABEL_YALIGN_ALIGN_ITEMS_VECTORS,Hn as LABEL_YALIGN_VECTORS,s as LEGAL_SECTION_VECTORS,c as LICENSE_INFO_VECTORS,l as LICENSE_SETTER_VECTORS,u as LICENSE_SPDX_VECTORS,d as LICENSE_TEXT_VECTORS,Ot as LIST_ITEMS_CHANGED_VECTORS,kt as LIST_MODEL_OWNERSHIP_VECTORS,At as LIST_NORMALIZE_VECTORS,jt as LIST_PARSE_VECTORS,Mt as LIST_SELECTION_CLAMP_VECTORS,hn as MAKE_COMPARABLE_VECTORS,bt as MENU_BUTTON_DIRECTION_VECTORS,It as MENU_DETAILED_ACTION_VECTORS,Lt as MENU_FLATTEN_VECTORS,Rt as MENU_ITEM_STATE_VECTORS,zt as MENU_NORMALIZE_VECTORS,Bt as MENU_PARSE_VECTORS,Vt as MENU_REFUSAL_VECTORS,at as NATURAL_SIDEBAR_WIDTH_VECTORS,ot as NAVIGATION_ACTION_VECTORS,st as NAVIGATION_SPLIT_VIEW_LAYOUT_VECTORS,ct as NAVIGATION_STACK_VECTORS,Ke as NAVIGATION_VIEW_VECTORS,m as NEAREST_ACCENT_VECTORS,lt as OVERLAY_COLLAPSE_VECTORS,ut as OVERLAY_SPLIT_VIEW_LAYOUT_VECTORS,dt as OVERLAY_SWIPE_AREA_VECTORS,ft as OVERLAY_SWIPE_CANCEL_VECTORS,pt as OVERLAY_SWIPE_RELEASE_VECTORS,mt as OVERLAY_SWIPE_SNAP_POINT_VECTORS,ht as OVERLAY_SWIPE_START_VECTORS,Fe as PASSWORD_ENTRY_ROW_VECTORS,Ie as PASSWORD_REVEAL_GUARD_VECTORS,wn as POPOVER_KEY_VECTORS,Tn as POPOVER_SURFACE_VECTORS,gn as PREFERENCES_GROUP_HEADER_VECTORS,_n as PREFERENCES_SEARCH_PAGES,vn as PREFERENCES_SEARCH_VECTORS,$n as PROPERTY_OF_VECTORS,ae as RADIO_GROUP_VECTORS,yn as ROW_MATCH_VECTORS,bn as SEARCH_CORPUS_VECTORS,xn as SEARCH_ROW_SUBTITLE_VECTORS,tr as SHARED_TREE_BLOCKS_WITHOUT_EXPECTATIONS,nr as SHARED_TREE_TABLES,En as SHORTCUT_LABEL_VECTORS,Xe as SIDEBAR_ACTIVATION_VECTORS,gt as SIDEBAR_BOUNDS_VECTORS,Ze as SIDEBAR_CLAMP_VECTORS,Qe as SIDEBAR_FILTER_VECTORS,$e as SIDEBAR_ITEMS_CHANGED_VECTORS,et as SIDEBAR_ITEM_FLAG_VECTORS,tt as SIDEBAR_MODEL_VECTORS,nt as SIDEBAR_MODE_VECTORS,_t as SIDEBAR_WIDTH_VECTORS,On as SPINNER_ARC_ENVELOPE,kn as SPINNER_ARC_PHASE_VECTORS,An as SPINNER_ARC_TOLERANCE,jn as SPINNER_CONSTANT_VECTORS,de as SPINNER_GEOMETRY_VECTORS,fe as SPINNER_SIZE_VECTORS,xt as SPLIT_BUTTON_CONTENT_VECTORS,St as SPLIT_BUTTON_DIRECTION_VECTORS,Ct as SPLIT_BUTTON_DROPDOWN_VECTORS,wt as SPLIT_BUTTON_MENU_ACTIVATION_VECTORS,Tt as SPLIT_BUTTON_ROOT_STATE_VECTORS,Et as SPLIT_BUTTON_STYLE_CLASS_VECTORS,Dt as SPLIT_BUTTON_TOOLTIP_VECTORS,vt as SPLIT_VIEW_MEASURE_VECTORS,Sn as STRIP_MARKUP_VECTORS,Cn as STRIP_MNEMONIC_VECTORS,y as SWITCH_ROW_NOTIFY_VECTORS,tn as TABS_REVEALED_VECTORS,nn as TAB_CLOSE_VISIBLE_VECTORS,rn as TAB_DESCENDANT_VECTORS,an as TAB_ICON_STATE_VECTORS,Nt as TAB_PAGES_ITEMS_CHANGED_VECTORS,on as TAB_PAGE_DESCRIPTOR_VECTORS,sn as TAB_SUCCESSOR_VECTORS,cn as TAB_TOOLTIP_VECTORS,ln as TAB_VIEW_VECTORS,yt as TAGS_CONFLICT_VECTORS,He as TOGGLE_ACTIVE_NAME_VECTORS,pe as TOOLBAR_VIEW_ALLOCATE_VECTORS,me as TOOLBAR_VIEW_CLASS_VECTORS,he as TOOLBAR_VIEW_CONTENT_FOR_SIZE_VECTORS,ge as TOOLBAR_VIEW_MEASURE_VECTORS,f as TRANSLATOR_CREDITS_VECTORS,er as VALUE_LIST_VECTORS,Ue as VIEW_STACK_ICON_NAME_VECTORS,We as VIEW_STACK_PAGE_VECTORS,Ge as VIEW_STACK_VECTORS,Wt as VIEW_SWITCHER_BADGE_VECTORS,Gt as VIEW_SWITCHER_BAR_REVEAL_VECTORS,Kt as VIEW_SWITCHER_BAR_VECTORS,qt as VIEW_SWITCHER_BUTTON_VECTORS,Jt as VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS,Yt as VIEW_SWITCHER_DRAG_VECTORS,Xt as VIEW_SWITCHER_ICON_VECTORS,Zt as VIEW_SWITCHER_MNEMONIC_VECTORS,Qt as VIEW_SWITCHER_REBUILD_VECTORS,$t as VIEW_SWITCHER_SELECTION_VECTORS,b as WINDOW_TITLE_VECTORS,Un as WRAP_BOX_CHILD_ORDER_VECTORS,Wn as WRAP_BOX_LENGTH_VECTORS,Gn as WRAP_BOX_LINE_VECTORS,Kn as WRAP_BOX_NATURAL_LENGTH_VECTORS,qn as WRAP_BOX_NOTIFY_PROPERTIES,Jn as WRAP_BOX_POLICY_VECTORS,Yn as WRAP_BOX_SPACING_NOTIFY_VECTORS,Xn as WRAP_BOX_SPACING_VECTORS,Pt as applyListReadback,un as applyTabViewOp,rr as authoredNodes,ir as authoredTags,qe as collectNavigationState,en as createViewSwitcherClock,Dn as formatShortcutLabelNodes,Je as navigationEventLog,ar as reachedTables,Ft as replayTabPagesAsSplices,Oe as runBottomSheetBottomBarSteps,ke as runBottomSheetSteps,Ye as runNavigationSteps,dn as seedTabViewPages,or as sharedTreeExpectations,sr as sharedTreePlacements,cr as subjectIndexOf,fn as tabViewClosing,pn as tabViewOrder,lr as withoutPlacements};
|
|
1
|
+
import{ABOUT_DIALOG_CREDITS_LEGAL_VECTORS as e,ABOUT_DIALOG_DETAILS_VECTORS as t,ABOUT_DIALOG_HEADER_VECTORS as n,ABOUT_DIALOG_LABEL_VECTORS as r,ABOUT_DIALOG_SUPPORT_VECTORS as i,CREDITS_SECTIONS_VECTORS as a,CREDIT_PERSON_VECTORS as o,LEGAL_SECTION_VECTORS as s,LICENSE_INFO_VECTORS as c,LICENSE_SETTER_VECTORS as l,LICENSE_SPDX_VECTORS as u,LICENSE_TEXT_VECTORS as d,TRANSLATOR_CREDITS_VECTORS as f}from"./about-dialog.js";import{ACCENT_COLOR_VECTORS as p,NEAREST_ACCENT_VECTORS as m}from"./accent.js";import{ACTION_ROW_ACTIVATION_VECTORS as h,BUTTON_ROW_ACTIVATABLE_VECTORS as g,BUTTON_ROW_ICON_VECTORS as _,LABEL_VISIBILITY_VECTORS as v,SWITCH_ROW_NOTIFY_VECTORS as y,WINDOW_TITLE_VECTORS as b}from"./action-row.js";import{ADJUSTMENT_AUTHORED_VECTORS as x,ADJUSTMENT_PARSE_VECTORS as S,ADJUSTMENT_SNAP_VECTORS as C}from"./adjustment.js";import{APPEARANCE_HANDOFF_VECTORS as w}from"./appearance.js";import{AVATAR_COLOR_VECTORS as T,AVATAR_FONT_SIZE_VECTORS as E,AVATAR_ICON_SIZE_VECTORS as D,AVATAR_INITIALS_VECTORS as O,AVATAR_MODE_VECTORS as k}from"./avatar.js";import{BANNER_BUTTON_STYLE_PARSE_VECTORS as A,BANNER_BUTTON_STYLE_VECTORS as j,BANNER_BUTTON_TEXT_VECTORS as M,BANNER_BUTTON_VISIBLE_VECTORS as N,BANNER_DEFAULT_VECTORS as P}from"./banner.js";import{BOX_ALL_VECTORS as F,BOX_ROW_VECTORS as I,BOX_SELECT_VECTORS as L}from"./box-selection.js";import{BOX_ORIENTATION_VECTORS as R,BOX_SPACING_VECTORS as z}from"./box.js";import{BREAKPOINT_PICK_VECTORS as B,BREAKPOINT_TRANSITION_VECTORS as V}from"./breakpoint-bin.js";import{BUTTON_CONTENT_DEFAULT_VECTORS as H,BUTTON_CONTENT_ELLIPSIZE_VECTORS as U,BUTTON_CONTENT_ICON_VECTORS as W,BUTTON_CONTENT_LABEL_VECTORS as G,BUTTON_CONTENT_STYLE_TARGET_VECTORS as K,BUTTON_CONTENT_TEXT_VECTORS as q}from"./button-content.js";import{BUTTON_STYLE_CLASS_VECTORS as J}from"./button.js";import{CALENDAR_DAYS_VECTORS as Y,CALENDAR_MARK_VECTORS as X,CALENDAR_NAVIGATION_VECTORS as Z,CALENDAR_SELECT_VECTORS as Q,CALENDAR_STEP_VECTORS as $,CALENDAR_WEEK_VECTORS as ee}from"./calendar.js";import{CAROUSEL_CLAMP_VECTORS as te,CAROUSEL_NAVIGATE_VECTORS as ne,CAROUSEL_PAGE_ALLOCATION_VECTORS as re,CAROUSEL_PAGE_AT_POSITION_VECTORS as ie,CAROUSEL_PAGE_LIST_VECTORS as ae,CAROUSEL_PROPERTY_DEFAULT_VECTORS as oe,CAROUSEL_RANGE_VECTORS as se,CAROUSEL_REORDER_SHIFT_VECTORS as ce,CAROUSEL_REVEAL_VECTORS as le,CAROUSEL_SIZES_FROM_SNAP_POINTS_VECTORS as ue,CAROUSEL_SNAP_POINT_VECTORS as de,CAROUSEL_WHEEL_LOCKOUT_VECTORS as fe,CAROUSEL_WHEEL_VECTORS as pe}from"./carousel.js";import{RADIO_GROUP_VECTORS as me}from"./checks.js";import{CLAMP_ALLOCATE_VECTORS as he,CLAMP_CHILD_SIZE_VECTORS as ge,CLAMP_PROPERTY_VECTORS as _e,CLAMP_SIZE_FROM_CHILD_VECTORS as ve,CLAMP_THRESHOLD_VECTORS as ye,SPINNER_GEOMETRY_VECTORS as be,SPINNER_SIZE_VECTORS as xe,TOOLBAR_VIEW_ALLOCATE_VECTORS as Se,TOOLBAR_VIEW_CLASS_VECTORS as Ce,TOOLBAR_VIEW_CONTENT_FOR_SIZE_VECTORS as we,TOOLBAR_VIEW_MEASURE_VECTORS as Te}from"./chrome.js";import{ENTRY_MAX_LENGTH_VECTORS as Ee,ENTRY_ROW_ACTIVATION_VECTORS as De,ENTRY_ROW_GUARD_VECTORS as Oe,ENTRY_ROW_STATE_VECTORS as ke,ENTRY_TEXT_LENGTH_VECTORS as Ae,PASSWORD_ENTRY_ROW_VECTORS as je,PASSWORD_REVEAL_GUARD_VECTORS as Me}from"./entry-row.js";import{SHARED_TREE_BLOCKS_WITHOUT_EXPECTATIONS as Ne,SHARED_TREE_TABLES as Pe,authoredNodes as Fe,authoredTags as Ie,reachedTables as Le,sharedTreeExpectations as Re,sharedTreePlacements as ze,subjectIndexOf as Be,withoutPlacements as Ve}from"./shared-trees.js";import{BREAKPOINT_VECTOR_SIZES as He,CONSTRUCT_KINDS as Ue,CONSTRUCT_VECTORS as We,EXTERN_VECTOR_CLASS as Ge,UnsupportedConstructError as Ke,assertTreeConstructs as qe,constructUsesOf as Je,driveConstructVectors as Ye}from"./constructs.js";import{DATA_GRID_CELL_TEXT_VECTORS as Xe,DATA_GRID_COLUMN_CLASS_VECTORS as Ze,DATA_GRID_COLUMN_NORMALIZE_VECTORS as Qe,DATA_GRID_INTERACTIVE_VECTORS as $e,DATA_GRID_TRACK_VECTORS as et,DATA_GRID_VARIANT_VECTORS as tt}from"./data-grid.js";import{BOTTOM_SHEET_BOTTOM_BAR_VECTORS as nt,BOTTOM_SHEET_CLOSE_VECTORS as rt,BOTTOM_SHEET_OPEN_VECTORS as it,BOTTOM_SHEET_PRESENTATION_VECTORS as at,BOTTOM_SHEET_SWIPE_TRACKER_VECTORS as ot,runBottomSheetBottomBarSteps as st,runBottomSheetSteps as ct}from"./dialog.js";import{GRID_NAVIGATION_GEOMETRY as lt,GRID_NAVIGATION_VECTORS as ut}from"./grid-navigation.js";import{HEADER_BAR_PACK_VECTORS as dt,HEADER_BAR_TITLE_SOURCE_VECTORS as ft,HEADER_BAR_TITLE_WIDGET_VECTORS as pt}from"./header-bar.js";import{COMBO_CHOOSER_VECTORS as mt,COMBO_SELECTION_VECTORS as ht,TOGGLE_ACTIVE_NAME_VECTORS as gt}from"./rows.js";import{VIEW_STACK_ICON_NAME_VECTORS as _t,VIEW_STACK_PAGE_VECTORS as vt,VIEW_STACK_VECTORS as yt}from"./view-stack.js";import{NAVIGATION_VIEW_VECTORS as bt,collectNavigationState as xt,navigationEventLog as St,runNavigationSteps as Ct}from"./navigation-view.js";import{SIDEBAR_ACTIVATION_VECTORS as wt,SIDEBAR_CLAMP_VECTORS as Tt,SIDEBAR_FILTER_VECTORS as Et,SIDEBAR_ITEMS_CHANGED_VECTORS as Dt,SIDEBAR_ITEM_FLAG_VECTORS as Ot,SIDEBAR_MODEL_VECTORS as kt,SIDEBAR_MODE_VECTORS as At}from"./sidebar.js";import{ADW_LENGTH_UNIT_VECTORS as jt,GLIB_CLAMP_VECTORS as Mt,NATURAL_SIDEBAR_WIDTH_VECTORS as Nt,NAVIGATION_ACTION_VECTORS as Pt,NAVIGATION_SPLIT_VIEW_LAYOUT_VECTORS as Ft,NAVIGATION_STACK_VECTORS as It,OVERLAY_COLLAPSE_VECTORS as Lt,OVERLAY_SPLIT_VIEW_LAYOUT_VECTORS as Rt,OVERLAY_SWIPE_AREA_VECTORS as zt,OVERLAY_SWIPE_CANCEL_VECTORS as Bt,OVERLAY_SWIPE_RELEASE_VECTORS as Vt,OVERLAY_SWIPE_SNAP_POINT_VECTORS as Ht,OVERLAY_SWIPE_START_VECTORS as Ut,SIDEBAR_BOUNDS_VECTORS as Wt,SIDEBAR_WIDTH_VECTORS as Gt,SPLIT_VIEW_MEASURE_VECTORS as Kt,TAGS_CONFLICT_VECTORS as qt}from"./split-view.js";import{MENU_BUTTON_DIRECTION_VECTORS as Jt,SPLIT_BUTTON_CONTENT_VECTORS as Yt,SPLIT_BUTTON_DIRECTION_VECTORS as Xt,SPLIT_BUTTON_DROPDOWN_VECTORS as Zt,SPLIT_BUTTON_MENU_ACTIVATION_VECTORS as Qt,SPLIT_BUTTON_ROOT_STATE_VECTORS as $t,SPLIT_BUTTON_STYLE_CLASS_VECTORS as en,SPLIT_BUTTON_TOOLTIP_VECTORS as tn}from"./split-button.js";import{LIST_ITEMS_CHANGED_VECTORS as nn,LIST_MODEL_OWNERSHIP_VECTORS as rn,LIST_NORMALIZE_VECTORS as an,LIST_PARSE_VECTORS as on,LIST_SELECTION_CLAMP_VECTORS as sn,TAB_PAGES_ITEMS_CHANGED_VECTORS as cn,applyListReadback as ln,replayTabPagesAsSplices as un}from"./list.js";import{COLUMN_VIEW_SORT_VECTORS as dn,GRID_VIEW_COLUMN_VECTORS as fn,LIST_VIEW_SELECT_VECTORS as pn}from"./list-view.js";import{TREE_EXPANDER_LAYOUT_VECTORS as mn,TREE_EXPANDER_SHORTCUT_VECTORS as hn}from"./tree-expander.js";import{MENU_DETAILED_ACTION_VECTORS as gn,MENU_FLATTEN_VECTORS as _n,MENU_ITEM_STATE_VECTORS as vn,MENU_NORMALIZE_VECTORS as yn,MENU_PARSE_VECTORS as bn,MENU_REFUSAL_VECTORS as xn}from"./menu.js";import{INLINE_TOGGLE_VECTORS as Sn,INLINE_TOOLTIP_VECTORS as Cn,VIEW_SWITCHER_BADGE_VECTORS as wn,VIEW_SWITCHER_BAR_REVEAL_VECTORS as Tn,VIEW_SWITCHER_BAR_VECTORS as En,VIEW_SWITCHER_BUTTON_VECTORS as Dn,VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS as On,VIEW_SWITCHER_DRAG_VECTORS as kn,VIEW_SWITCHER_ICON_VECTORS as An,VIEW_SWITCHER_MNEMONIC_VECTORS as jn,VIEW_SWITCHER_REBUILD_VECTORS as Mn,VIEW_SWITCHER_SELECTION_VECTORS as Nn,VIEW_SWITCHER_SIDEBAR_SECTION_VECTORS as Pn,createViewSwitcherClock as Fn}from"./view-switcher.js";import{TABS_REVEALED_VECTORS as In,TAB_CLOSE_VISIBLE_VECTORS as Ln,TAB_DESCENDANT_VECTORS as Rn,TAB_ICON_STATE_VECTORS as zn,TAB_PAGE_DESCRIPTOR_VECTORS as Bn,TAB_SEARCH_VECTORS as Vn,TAB_SUCCESSOR_VECTORS as Hn,TAB_TOOLTIP_VECTORS as Un,TAB_VIEW_VECTORS as Wn,applyTabViewOp as Gn,seedTabViewPages as Kn,tabViewClosing as qn,tabViewOrder as Jn}from"./tab-view.js";import{CASE_FOLD_VECTORS as Yn,MAKE_COMPARABLE_VECTORS as Xn,PREFERENCES_GROUP_HEADER_VECTORS as Zn,PREFERENCES_SEARCH_PAGES as Qn,PREFERENCES_SEARCH_VECTORS as $n,ROW_MATCH_VECTORS as er,SEARCH_CORPUS_VECTORS as tr,SEARCH_ROW_SUBTITLE_VECTORS as nr,STRIP_MARKUP_VECTORS as rr,STRIP_MNEMONIC_VECTORS as ir}from"./preferences.js";import{POPOVER_KEY_VECTORS as ar,POPOVER_SURFACE_VECTORS as or}from"./popover.js";import{SHORTCUT_LABEL_VECTORS as sr,formatShortcutLabelNodes as cr}from"./shortcut-label.js";import{SPINNER_ARC_ENVELOPE as lr,SPINNER_ARC_PHASE_VECTORS as ur,SPINNER_ARC_TOLERANCE as dr,SPINNER_CONSTANT_VECTORS as fr}from"./spinner.js";import{LABEL_CHAR_COUNT_VECTORS as pr,LABEL_DISPLAY_TEXT_VECTORS as mr,LABEL_EFFECTIVE_LINES_VECTORS as hr,LABEL_ELLIPSIZE_OVERFLOW_VECTORS as gr,LABEL_ELLIPSIZE_VECTORS as _r,LABEL_JUSTIFY_VECTORS as vr,LABEL_WIDTH_CHARS_EXTENT_VECTORS as yr,LABEL_WRAP_MODE_VECTORS as br,LABEL_XALIGN_VECTORS as xr,LABEL_YALIGN_ALIGN_ITEMS_VECTORS as Sr,LABEL_YALIGN_VECTORS as Cr}from"./label.js";import{WRAP_BOX_CHILD_ORDER_VECTORS as wr,WRAP_BOX_LENGTH_VECTORS as Tr,WRAP_BOX_LINE_VECTORS as Er,WRAP_BOX_NATURAL_LENGTH_VECTORS as Dr,WRAP_BOX_NOTIFY_PROPERTIES as Or,WRAP_BOX_POLICY_VECTORS as kr,WRAP_BOX_SPACING_NOTIFY_VECTORS as Ar,WRAP_BOX_SPACING_VECTORS as jr}from"./wrap-box.js";import{ATTRIBUTE_OF_VECTORS as Mr,HOST_TAG_VECTORS as Nr,PROPERTY_OF_VECTORS as Pr}from"./tags.js";import{VALUE_LIST_VECTORS as Fr}from"./value-lists.js";export{e as ABOUT_DIALOG_CREDITS_LEGAL_VECTORS,t as ABOUT_DIALOG_DETAILS_VECTORS,n as ABOUT_DIALOG_HEADER_VECTORS,r as ABOUT_DIALOG_LABEL_VECTORS,i as ABOUT_DIALOG_SUPPORT_VECTORS,p as ACCENT_COLOR_VECTORS,h as ACTION_ROW_ACTIVATION_VECTORS,x as ADJUSTMENT_AUTHORED_VECTORS,S as ADJUSTMENT_PARSE_VECTORS,C as ADJUSTMENT_SNAP_VECTORS,jt as ADW_LENGTH_UNIT_VECTORS,w as APPEARANCE_HANDOFF_VECTORS,Mr as ATTRIBUTE_OF_VECTORS,T as AVATAR_COLOR_VECTORS,E as AVATAR_FONT_SIZE_VECTORS,D as AVATAR_ICON_SIZE_VECTORS,O as AVATAR_INITIALS_VECTORS,k as AVATAR_MODE_VECTORS,A as BANNER_BUTTON_STYLE_PARSE_VECTORS,j as BANNER_BUTTON_STYLE_VECTORS,M as BANNER_BUTTON_TEXT_VECTORS,N as BANNER_BUTTON_VISIBLE_VECTORS,P as BANNER_DEFAULT_VECTORS,nt as BOTTOM_SHEET_BOTTOM_BAR_VECTORS,rt as BOTTOM_SHEET_CLOSE_VECTORS,it as BOTTOM_SHEET_OPEN_VECTORS,at as BOTTOM_SHEET_PRESENTATION_VECTORS,ot as BOTTOM_SHEET_SWIPE_TRACKER_VECTORS,F as BOX_ALL_VECTORS,R as BOX_ORIENTATION_VECTORS,I as BOX_ROW_VECTORS,L as BOX_SELECT_VECTORS,z as BOX_SPACING_VECTORS,B as BREAKPOINT_PICK_VECTORS,V as BREAKPOINT_TRANSITION_VECTORS,He as BREAKPOINT_VECTOR_SIZES,H as BUTTON_CONTENT_DEFAULT_VECTORS,U as BUTTON_CONTENT_ELLIPSIZE_VECTORS,W as BUTTON_CONTENT_ICON_VECTORS,G as BUTTON_CONTENT_LABEL_VECTORS,K as BUTTON_CONTENT_STYLE_TARGET_VECTORS,q as BUTTON_CONTENT_TEXT_VECTORS,g as BUTTON_ROW_ACTIVATABLE_VECTORS,_ as BUTTON_ROW_ICON_VECTORS,J as BUTTON_STYLE_CLASS_VECTORS,Y as CALENDAR_DAYS_VECTORS,X as CALENDAR_MARK_VECTORS,Z as CALENDAR_NAVIGATION_VECTORS,Q as CALENDAR_SELECT_VECTORS,$ as CALENDAR_STEP_VECTORS,ee as CALENDAR_WEEK_VECTORS,te as CAROUSEL_CLAMP_VECTORS,ne as CAROUSEL_NAVIGATE_VECTORS,re as CAROUSEL_PAGE_ALLOCATION_VECTORS,ie as CAROUSEL_PAGE_AT_POSITION_VECTORS,ae as CAROUSEL_PAGE_LIST_VECTORS,oe as CAROUSEL_PROPERTY_DEFAULT_VECTORS,se as CAROUSEL_RANGE_VECTORS,ce as CAROUSEL_REORDER_SHIFT_VECTORS,le as CAROUSEL_REVEAL_VECTORS,ue as CAROUSEL_SIZES_FROM_SNAP_POINTS_VECTORS,de as CAROUSEL_SNAP_POINT_VECTORS,fe as CAROUSEL_WHEEL_LOCKOUT_VECTORS,pe as CAROUSEL_WHEEL_VECTORS,Yn as CASE_FOLD_VECTORS,he as CLAMP_ALLOCATE_VECTORS,ge as CLAMP_CHILD_SIZE_VECTORS,_e as CLAMP_PROPERTY_VECTORS,ve as CLAMP_SIZE_FROM_CHILD_VECTORS,ye as CLAMP_THRESHOLD_VECTORS,dn as COLUMN_VIEW_SORT_VECTORS,mt as COMBO_CHOOSER_VECTORS,ht as COMBO_SELECTION_VECTORS,Ue as CONSTRUCT_KINDS,We as CONSTRUCT_VECTORS,a as CREDITS_SECTIONS_VECTORS,o as CREDIT_PERSON_VECTORS,Xe as DATA_GRID_CELL_TEXT_VECTORS,Ze as DATA_GRID_COLUMN_CLASS_VECTORS,Qe as DATA_GRID_COLUMN_NORMALIZE_VECTORS,$e as DATA_GRID_INTERACTIVE_VECTORS,et as DATA_GRID_TRACK_VECTORS,tt as DATA_GRID_VARIANT_VECTORS,Ee as ENTRY_MAX_LENGTH_VECTORS,De as ENTRY_ROW_ACTIVATION_VECTORS,Oe as ENTRY_ROW_GUARD_VECTORS,ke as ENTRY_ROW_STATE_VECTORS,Ae as ENTRY_TEXT_LENGTH_VECTORS,Ge as EXTERN_VECTOR_CLASS,Mt as GLIB_CLAMP_VECTORS,lt as GRID_NAVIGATION_GEOMETRY,ut as GRID_NAVIGATION_VECTORS,fn as GRID_VIEW_COLUMN_VECTORS,dt as HEADER_BAR_PACK_VECTORS,ft as HEADER_BAR_TITLE_SOURCE_VECTORS,pt as HEADER_BAR_TITLE_WIDGET_VECTORS,Nr as HOST_TAG_VECTORS,Sn as INLINE_TOGGLE_VECTORS,Cn as INLINE_TOOLTIP_VECTORS,pr as LABEL_CHAR_COUNT_VECTORS,mr as LABEL_DISPLAY_TEXT_VECTORS,hr as LABEL_EFFECTIVE_LINES_VECTORS,gr as LABEL_ELLIPSIZE_OVERFLOW_VECTORS,_r as LABEL_ELLIPSIZE_VECTORS,vr as LABEL_JUSTIFY_VECTORS,v as LABEL_VISIBILITY_VECTORS,yr as LABEL_WIDTH_CHARS_EXTENT_VECTORS,br as LABEL_WRAP_MODE_VECTORS,xr as LABEL_XALIGN_VECTORS,Sr as LABEL_YALIGN_ALIGN_ITEMS_VECTORS,Cr as LABEL_YALIGN_VECTORS,s as LEGAL_SECTION_VECTORS,c as LICENSE_INFO_VECTORS,l as LICENSE_SETTER_VECTORS,u as LICENSE_SPDX_VECTORS,d as LICENSE_TEXT_VECTORS,nn as LIST_ITEMS_CHANGED_VECTORS,rn as LIST_MODEL_OWNERSHIP_VECTORS,an as LIST_NORMALIZE_VECTORS,on as LIST_PARSE_VECTORS,sn as LIST_SELECTION_CLAMP_VECTORS,pn as LIST_VIEW_SELECT_VECTORS,Xn as MAKE_COMPARABLE_VECTORS,Jt as MENU_BUTTON_DIRECTION_VECTORS,gn as MENU_DETAILED_ACTION_VECTORS,_n as MENU_FLATTEN_VECTORS,vn as MENU_ITEM_STATE_VECTORS,yn as MENU_NORMALIZE_VECTORS,bn as MENU_PARSE_VECTORS,xn as MENU_REFUSAL_VECTORS,Nt as NATURAL_SIDEBAR_WIDTH_VECTORS,Pt as NAVIGATION_ACTION_VECTORS,Ft as NAVIGATION_SPLIT_VIEW_LAYOUT_VECTORS,It as NAVIGATION_STACK_VECTORS,bt as NAVIGATION_VIEW_VECTORS,m as NEAREST_ACCENT_VECTORS,Lt as OVERLAY_COLLAPSE_VECTORS,Rt as OVERLAY_SPLIT_VIEW_LAYOUT_VECTORS,zt as OVERLAY_SWIPE_AREA_VECTORS,Bt as OVERLAY_SWIPE_CANCEL_VECTORS,Vt as OVERLAY_SWIPE_RELEASE_VECTORS,Ht as OVERLAY_SWIPE_SNAP_POINT_VECTORS,Ut as OVERLAY_SWIPE_START_VECTORS,je as PASSWORD_ENTRY_ROW_VECTORS,Me as PASSWORD_REVEAL_GUARD_VECTORS,ar as POPOVER_KEY_VECTORS,or as POPOVER_SURFACE_VECTORS,Zn as PREFERENCES_GROUP_HEADER_VECTORS,Qn as PREFERENCES_SEARCH_PAGES,$n as PREFERENCES_SEARCH_VECTORS,Pr as PROPERTY_OF_VECTORS,me as RADIO_GROUP_VECTORS,er as ROW_MATCH_VECTORS,tr as SEARCH_CORPUS_VECTORS,nr as SEARCH_ROW_SUBTITLE_VECTORS,Ne as SHARED_TREE_BLOCKS_WITHOUT_EXPECTATIONS,Pe as SHARED_TREE_TABLES,sr as SHORTCUT_LABEL_VECTORS,wt as SIDEBAR_ACTIVATION_VECTORS,Wt as SIDEBAR_BOUNDS_VECTORS,Tt as SIDEBAR_CLAMP_VECTORS,Et as SIDEBAR_FILTER_VECTORS,Dt as SIDEBAR_ITEMS_CHANGED_VECTORS,Ot as SIDEBAR_ITEM_FLAG_VECTORS,kt as SIDEBAR_MODEL_VECTORS,At as SIDEBAR_MODE_VECTORS,Gt as SIDEBAR_WIDTH_VECTORS,lr as SPINNER_ARC_ENVELOPE,ur as SPINNER_ARC_PHASE_VECTORS,dr as SPINNER_ARC_TOLERANCE,fr as SPINNER_CONSTANT_VECTORS,be as SPINNER_GEOMETRY_VECTORS,xe as SPINNER_SIZE_VECTORS,Yt as SPLIT_BUTTON_CONTENT_VECTORS,Xt as SPLIT_BUTTON_DIRECTION_VECTORS,Zt as SPLIT_BUTTON_DROPDOWN_VECTORS,Qt as SPLIT_BUTTON_MENU_ACTIVATION_VECTORS,$t as SPLIT_BUTTON_ROOT_STATE_VECTORS,en as SPLIT_BUTTON_STYLE_CLASS_VECTORS,tn as SPLIT_BUTTON_TOOLTIP_VECTORS,Kt as SPLIT_VIEW_MEASURE_VECTORS,rr as STRIP_MARKUP_VECTORS,ir as STRIP_MNEMONIC_VECTORS,y as SWITCH_ROW_NOTIFY_VECTORS,In as TABS_REVEALED_VECTORS,Ln as TAB_CLOSE_VISIBLE_VECTORS,Rn as TAB_DESCENDANT_VECTORS,zn as TAB_ICON_STATE_VECTORS,cn as TAB_PAGES_ITEMS_CHANGED_VECTORS,Bn as TAB_PAGE_DESCRIPTOR_VECTORS,Vn as TAB_SEARCH_VECTORS,Hn as TAB_SUCCESSOR_VECTORS,Un as TAB_TOOLTIP_VECTORS,Wn as TAB_VIEW_VECTORS,qt as TAGS_CONFLICT_VECTORS,gt as TOGGLE_ACTIVE_NAME_VECTORS,Se as TOOLBAR_VIEW_ALLOCATE_VECTORS,Ce as TOOLBAR_VIEW_CLASS_VECTORS,we as TOOLBAR_VIEW_CONTENT_FOR_SIZE_VECTORS,Te as TOOLBAR_VIEW_MEASURE_VECTORS,f as TRANSLATOR_CREDITS_VECTORS,mn as TREE_EXPANDER_LAYOUT_VECTORS,hn as TREE_EXPANDER_SHORTCUT_VECTORS,Ke as UnsupportedConstructError,Fr as VALUE_LIST_VECTORS,_t as VIEW_STACK_ICON_NAME_VECTORS,vt as VIEW_STACK_PAGE_VECTORS,yt as VIEW_STACK_VECTORS,wn as VIEW_SWITCHER_BADGE_VECTORS,Tn as VIEW_SWITCHER_BAR_REVEAL_VECTORS,En as VIEW_SWITCHER_BAR_VECTORS,Dn as VIEW_SWITCHER_BUTTON_VECTORS,On as VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS,kn as VIEW_SWITCHER_DRAG_VECTORS,An as VIEW_SWITCHER_ICON_VECTORS,jn as VIEW_SWITCHER_MNEMONIC_VECTORS,Mn as VIEW_SWITCHER_REBUILD_VECTORS,Nn as VIEW_SWITCHER_SELECTION_VECTORS,Pn as VIEW_SWITCHER_SIDEBAR_SECTION_VECTORS,b as WINDOW_TITLE_VECTORS,wr as WRAP_BOX_CHILD_ORDER_VECTORS,Tr as WRAP_BOX_LENGTH_VECTORS,Er as WRAP_BOX_LINE_VECTORS,Dr as WRAP_BOX_NATURAL_LENGTH_VECTORS,Or as WRAP_BOX_NOTIFY_PROPERTIES,kr as WRAP_BOX_POLICY_VECTORS,Ar as WRAP_BOX_SPACING_NOTIFY_VECTORS,jr as WRAP_BOX_SPACING_VECTORS,ln as applyListReadback,Gn as applyTabViewOp,qe as assertTreeConstructs,Fe as authoredNodes,Ie as authoredTags,xt as collectNavigationState,Je as constructUsesOf,Fn as createViewSwitcherClock,Ye as driveConstructVectors,cr as formatShortcutLabelNodes,St as navigationEventLog,Le as reachedTables,un as replayTabPagesAsSplices,st as runBottomSheetBottomBarSteps,ct as runBottomSheetSteps,Ct as runNavigationSteps,Kn as seedTabViewPages,Re as sharedTreeExpectations,ze as sharedTreePlacements,Be as subjectIndexOf,qn as tabViewClosing,Jn as tabViewOrder,Ve as withoutPlacements};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=[{rule:`a plain click selects exclusively`,mode:`single`,length:4,clicks:[{position:1},{position:3}],selection:[3]},{rule:`a position the model does not have is ignored`,mode:`single`,length:4,clicks:[{position:1},{position:9}],selection:[1]},{rule:`GtkNoSelection answers every click with nothing selected`,mode:`none`,length:4,clicks:[{position:2},{position:0,modify:!0}],selection:[]},{rule:`Ctrl+click adds a row in multiple mode`,mode:`multiple`,length:4,clicks:[{position:0},{position:2,modify:!0}],selection:[0,2]},{rule:`Ctrl+click removes a selected row in multiple mode`,mode:`multiple`,length:4,clicks:[{position:0},{position:2,modify:!0},{position:0,modify:!0}],selection:[2]},{rule:`Ctrl+click on the selected row leaves it selected in single mode`,mode:`single`,length:4,clicks:[{position:1},{position:1,modify:!0}],selection:[1]},{rule:`Ctrl+click on another row moves the single selection`,mode:`single`,length:4,clicks:[{position:1},{position:3,modify:!0}],selection:[3]},{rule:`Shift+click selects the span from the anchor and drops the rest`,mode:`multiple`,length:4,clicks:[{position:0},{position:2,extend:!0}],selection:[0,1,2]},{rule:`the span runs backwards from the anchor too`,mode:`multiple`,length:4,clicks:[{position:3},{position:1,extend:!0}],selection:[1,2,3]},{rule:`Ctrl+Shift extends with the anchor state, clearing a run from an unselected anchor`,mode:`multiple`,length:4,clicks:[{position:1},{position:3,extend:!0},{position:0,modify:!0}],selection:[0,1,2,3]},{rule:`Shift+click in single mode falls through to a plain selection`,mode:`single`,length:4,clicks:[{position:0},{position:3,extend:!0}],selection:[3]},{rule:`the anchor follows the last accepted click, so a later extend starts there`,mode:`multiple`,length:5,clicks:[{position:0},{position:3},{position:4,extend:!0}],selection:[3,4]}],t=[{rule:`the available size divided by the item size, rounding down`,forSize:400,itemSize:100,spacing:0,minColumns:1,maxColumns:7,columns:4},{rule:`one pixel short of a column is one column fewer`,forSize:399,itemSize:100,spacing:0,minColumns:1,maxColumns:7,columns:3},{rule:`the spacing counts BETWEEN items only, so the last column needs no trailing gap`,forSize:324,itemSize:100,spacing:12,minColumns:1,maxColumns:7,columns:3},{rule:`one pixel short of that is two columns`,forSize:323,itemSize:100,spacing:12,minColumns:1,maxColumns:7,columns:2},{rule:`a wide view is capped at max-columns`,forSize:4e3,itemSize:100,spacing:0,minColumns:1,maxColumns:7,columns:7},{rule:`a narrow view is floored at min-columns, cramped rather than reflowed`,forSize:50,itemSize:100,spacing:0,minColumns:2,maxColumns:7,columns:2},{rule:`with max below min, a narrow view answers min`,forSize:50,itemSize:100,spacing:0,minColumns:4,maxColumns:2,columns:4},{rule:`with max below min, a wide view answers min too`,forSize:4e3,itemSize:100,spacing:0,minColumns:4,maxColumns:2,columns:4},{rule:`an item that measures nothing does not divide by zero`,forSize:400,itemSize:0,spacing:0,minColumns:1,maxColumns:7,columns:7}],n=[{rule:`a first click sorts the column ascending`,current:null,column:`name`,sortable:!0,next:{column:`name`,descending:!1}},{rule:`a second click on the primary column inverts it`,current:{column:`name`,descending:!1},column:`name`,sortable:!0,next:{column:`name`,descending:!0}},{rule:`a third click inverts it back rather than clearing the sort`,current:{column:`name`,descending:!0},column:`name`,sortable:!0,next:{column:`name`,descending:!1}},{rule:`a click on another column makes that one primary, ascending`,current:{column:`name`,descending:!0},column:`code`,sortable:!0,next:{column:`code`,descending:!1}},{rule:`a column with no sorter leaves the sort exactly as it was`,current:{column:`name`,descending:!1},column:`code`,sortable:!1,next:{column:`name`,descending:!1}}];export{n as COLUMN_VIEW_SORT_VECTORS,t as GRID_VIEW_COLUMN_VECTORS,e as LIST_VIEW_SELECT_VECTORS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../_virtual/_rolldown/runtime.js";const e=[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`A`},{id:`B`}],AUTO_SELECT=e=>[{selectedId:e,selectedIndex:0,previousId:null,interactive:!1}],t=[{rule:`closing the selected page selects the NEXT one and removes it — web removed nothing at all, so every close was permanently denied`,derivedFrom:`close_page_cb confirms a non-pinned page (adw-tab-view.c:1990-1991); select_previous_page falls through to adw_tab_view_select_next_page (:1893) which succeeds at pos 1 < n_pages-1 (:3753); detach_page removes at :1915`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closePage`,id:`B`}],opResults:[!0,!0],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0},{selectedId:`C`,selectedIndex:2,previousId:`B`,interactive:!1}],pagesChanges:[{kind:`detached`,id:`B`,position:1,previousPosition:1}],order:[`A`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1},{rule:`closing the LAST page falls back to the previous one`,derivedFrom:`select_next_page returns FALSE at pos >= n_pages-1 (adw-tab-view.c:3753), so select_previous_page runs (:1896, :3723)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`closePage`,id:`C`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0},{selectedId:`B`,selectedIndex:1,previousId:`C`,interactive:!1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`B`,selectedIndex:1},{rule:`closing a page BEFORE the selection keeps the same page selected, shifts its index down, and emits NOTHING`,derivedFrom:`select_previous_page early-returns because page != selected_page (adw-tab-view.c:1864-1865), so set_selected_page and its notify (:1854) are never reached`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`closePage`,id:`A`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1},{rule:`closing the ONLY page empties the view: no selection, index -1 — both ports reported index 0 for a page-less view, and NS refused the close outright`,derivedFrom:"detach_page: `if (self->n_pages == 1) set_selected_page (self, NULL, !in_dispose);` (adw-tab-view.c:1912-1913)",pages:[{id:`A`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`A`}],opResults:[!0],changes:[{selectedId:null,selectedIndex:-1,previousId:`A`,interactive:!1}],pagesChanges:[{kind:`detached`,id:`A`,position:0,previousPosition:0}],order:[],nPinnedPages:0,selectedId:null,selectedIndex:-1},{rule:`a page opened from a parent falls back to the SIBLING opened before it, not to the next page`,derivedFrom:`select_previous_page: parent is set and pos > 0, prev is a descendant of the parent -> select prev (adw-tab-view.c:1869-1878)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`select`,id:`C2`},{kind:`closePage`,id:`C2`}],opResults:[!0,!0],changes:[{selectedId:`C2`,selectedIndex:2,previousId:`P`,interactive:!0},{selectedId:`C1`,selectedIndex:1,previousId:`C2`,interactive:!1}],order:[`P`,`C1`],nPinnedPages:0,selectedId:`C1`,selectedIndex:1},{rule:`closing a tab you opened from another tab lands back on the OPENER, not on the next tab — the rule both ports lack entirely`,derivedFrom:`is_descendant_of returns TRUE for page == parent because the while-loop exits immediately (adw-tab-view.c:1735-1742), so prev == parent hits the descendant branch (:1874-1877) instead of falling through to select_next_page`,pages:[{id:`P`},{id:`X`,parentId:`P`},{id:`Y`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`select`,id:`X`},{kind:`closePage`,id:`X`}],opResults:[!0,!0],changes:[{selectedId:`X`,selectedIndex:1,previousId:`P`,interactive:!0},{selectedId:`P`,selectedIndex:0,previousId:`X`,interactive:!1}],order:[`P`,`Y`],nPinnedPages:0,selectedId:`P`,selectedIndex:0},{rule:`with a PINNED parent the previous page is a different pinned tab, so the parent is selected directly`,derivedFrom:`prev is not a descendant of the parent, but prev.pinned && parent.pinned holds -> select the parent (adw-tab-view.c:1880-1890). A page opened from a pinned parent is placed after the LAST pinned page, which is why the previous page need not be the parent.`,pages:[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`X`,parentId:`P0`}],setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`X`},{kind:`closePage`,id:`X`}],opResults:[!0,!0],changes:[{selectedId:`X`,selectedIndex:2,previousId:`P0`,interactive:!0},{selectedId:`P0`,selectedIndex:0,previousId:`X`,interactive:!1}],order:[`P0`,`P1`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`a PINNED page is denied by the default handler: nothing is removed and the page is no longer closing`,derivedFrom:"close_page_cb calls close_page_finish with `!adw_tab_page_get_pinned (page)` (adw-tab-view.c:1990-1991); close_page_finish clears the flag then returns on !confirm (:4428-4431)",pages:[{id:`A`,pinned:!0},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`A`}],opResults:[!0],changes:[],closeAttempts:[`A`],order:[`A`,`B`],nPinnedPages:1,selectedId:`A`,selectedIndex:0,closing:[]},{rule:`a deferred close is re-entrant-safe: the second request is ignored and the handler does NOT run again — the seam that lets an app show "save before closing?"`,derivedFrom:"`if (page->closing) return;` (adw-tab-view.c:4396-4397); close_page_finish clears the flag and returns without detaching when confirm is FALSE (:4428-4431)",pages:[{id:`A`},{id:`B`},{id:`C`}],handler:`defer`,setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`B`},{kind:`closePage`,id:`B`},{kind:`closePageFinish`,id:`B`,confirm:!1}],opResults:[!0,!1,!1],changes:[],closeAttempts:[`B`],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,closing:[]},{rule:`a deferred close that is later CONFIRMED detaches the page, successor rule and all`,derivedFrom:`close_page_finish with confirm TRUE calls detach_page (adw-tab-view.c:4436)`,pages:[{id:`A`},{id:`B`},{id:`C`}],handler:`defer`,setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closePage`,id:`B`},{kind:`closePageFinish`,id:`B`,confirm:!0}],opResults:[!0,!0,!0],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0},{selectedId:`C`,selectedIndex:2,previousId:`B`,interactive:!1}],closeAttempts:[`B`],order:[`A`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1,closing:[]},{rule:`closePagesAfter walks DESCENDING — the order is part of the spec, because each confirmed close shifts every later index`,derivedFrom:"`for (i = self->n_pages - 1; i > pos; i--)` (adw-tab-view.c:4511)",pages:[{id:`A`},{id:`B`},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePagesAfter`,id:`B`}],opResults:[null],changes:[],closeAttempts:[`D`,`C`],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`closePagesBefore walks DESCENDING too`,derivedFrom:"`for (i = pos - 1; i >= 0; i--)` (adw-tab-view.c:4485)",pages:[{id:`A`},{id:`B`},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`D`},{kind:`closePagesBefore`,id:`C`}],opResults:[!0,null],changes:[{selectedId:`D`,selectedIndex:3,previousId:`A`,interactive:!0}],closeAttempts:[`B`,`A`],order:[`C`,`D`],nPinnedPages:0,selectedId:`D`,selectedIndex:1},{rule:`closeOtherPages skips the kept page and leaves the selection on it throughout`,derivedFrom:"`for (i = self->n_pages - 1; i >= 0; i--)` with `if (p == page) continue;` (adw-tab-view.c:4456-4462)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closeOtherPages`,id:`B`}],opResults:[!0,null],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0}],closeAttempts:[`C`,`A`],order:[`B`],nPinnedPages:0,selectedId:`B`,selectedIndex:0},{rule:`pinning moves the page to the end of the pinned prefix and grows the prefix`,derivedFrom:`old_pos 2 removed, new_pos = n_pinned_pages = 1, insert at 1, n_pinned = new_pos + 1 = 2 (adw-tab-view.c:4062-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`C`,pinned:!0}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`C`,position:1,previousPosition:2}],order:[`A`,`C`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:0},{rule:`unpinning moves the page to just BEFORE the other non-pinned pages`,derivedFrom:`old_pos 0 removed, new_pos = 2 - 1 = 1, insert at 1, n_pinned = new_pos + 0 = 1 (adw-tab-view.c:4066-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`,pinned:!0},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`A`,pinned:!1}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`A`,position:1,previousPosition:0}],order:[`B`,`A`,`C`,`D`],nPinnedPages:1,selectedId:`A`,selectedIndex:1},{rule:`unpinning the LAST pinned page changes the count without moving anything — new_pos lands exactly where the page already was`,derivedFrom:`old_pos 1 removed -> [A,C]; new_pos = 2 - 1 = 1; insert at 1 -> [A,B,C]; n_pinned = 1 (adw-tab-view.c:4066-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`,pinned:!0},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`B`,pinned:!1}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`B`,position:1,previousPosition:1}],order:[`A`,`B`,`C`],nPinnedPages:1,selectedId:`A`,selectedIndex:0},{rule:`pinning an already-pinned page is a no-op that emits nothing`,derivedFrom:"`if (adw_tab_page_get_pinned (page) == pinned) return;` (adw-tab-view.c:4059-4060)",pages:[{id:`A`,pinned:!0},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`A`,pinned:!0}],opResults:[-1],changes:[],pagesChanges:[],order:[`A`,`B`],nPinnedPages:1,selectedId:`A`,selectedIndex:0},{rule:`addPage inserts after the parent AND after every consecutive descendant of it, so links opened from one tab keep their order`,derivedFrom:`position starts at pos(P) = 0, then the do/while advances past every consecutive descendant of P and stops at X (adw-tab-view.c:4208-4217)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`},{id:`X`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`addPage`,page:{id:`N`},parentId:`P`}],opResults:[3],changes:[],pagesChanges:[{kind:`attached`,id:`N`,position:3,previousPosition:-1}],order:[`P`,`C1`,`C2`,`N`,`X`],nPinnedPages:0,selectedId:`P`,selectedIndex:0},{rule:`a PINNED parent inserts after the last pinned page, and the new page is itself NOT pinned`,derivedFrom:`a pinned parent sets position = n_pinned_pages - 1 = 1 and the loop increments to 2 (adw-tab-view.c:4205-4217); create_and_insert_page is called with pinned = FALSE (:4222)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`addPage`,page:{id:`N`},parentId:`P0`}],opResults:[2],changes:[],order:[`P0`,`P1`,`N`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`a null parent appends`,derivedFrom:"`position = self->n_pages;` for a NULL parent (adw-tab-view.c:4219)",pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`addPage`,page:{id:`N`},parentId:null}],opResults:[2],changes:[],order:[`A`,`B`,`N`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`the FIRST page added auto-selects and notifies; the second does not — and the attach is heard before the selection, so a renderer has built the tab by then`,derivedFrom:"insert_page auto-selects only when there is no selection: `if (!self->selected_page) set_selected_page (self, page, FALSE);` (adw-tab-view.c:1953-1954), inside the freeze/thaw that follows attach_page's page-attached signal (:1748-1778)",pages:[],setupChanges:[],ops:[{kind:`appendPage`,page:{id:`A`}},{kind:`appendPage`,page:{id:`B`}}],opResults:[0,1],changes:[{selectedId:`A`,selectedIndex:0,previousId:null,interactive:!1}],pagesChanges:[{kind:`attached`,id:`A`,position:0,previousPosition:-1},{kind:`attached`,id:`B`,position:1,previousPosition:-1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`a non-pinned insert BEFORE a pinned page is refused outright, not clamped`,derivedFrom:"`g_return_val_if_fail (position >= self->n_pinned_pages, NULL)` (adw-tab-view.c:4246)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`insertPage`,page:{id:`N`},position:1}],opResults:[-1],changes:[],pagesChanges:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_insert: assertion 'position >= self->n_pinned_pages' failed`]},{rule:`a pinned insert AFTER a non-pinned page is refused outright`,derivedFrom:"`g_return_val_if_fail (position <= self->n_pinned_pages, NULL)` (adw-tab-view.c:4313)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`insertPinnedPage`,page:{id:`N`},position:3}],opResults:[-1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_insert_pinned: assertion 'position <= self->n_pinned_pages' failed`]},{rule:`prepend inserts at the pinned boundary and shifts the selection with its page`,derivedFrom:"`create_and_insert_page (self, child, NULL, self->n_pinned_pages, FALSE)` (adw-tab-view.c:4268)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`A`},{kind:`prependPage`,page:{id:`N`}}],opResults:[!0,2],changes:[{selectedId:`A`,selectedIndex:2,previousId:`P0`,interactive:!0}],order:[`P0`,`P1`,`N`,`A`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:3},{rule:`appendPinnedPage grows the pinned prefix and pushes the non-pinned pages back`,derivedFrom:"`create_and_insert_page (self, child, NULL, self->n_pinned_pages, TRUE)` (adw-tab-view.c:4356)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`appendPinnedPage`,page:{id:`P2`}}],opResults:[2],changes:[],order:[`P0`,`P1`,`P2`,`A`,`B`],nPinnedPages:3,selectedId:`P0`,selectedIndex:0},{rule:`selectFirst from the FIRST non-pinned tab hops the partition boundary into pinned territory`,derivedFrom:`pos = n_pinned_pages = 2 gives A itself, and since !pinned it falls back to nth(0) (adw-tab-view.c:3776-3782)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`A`},{kind:`selectFirst`}],opResults:[!0,!0],changes:[{selectedId:`A`,selectedIndex:2,previousId:`P0`,interactive:!0},{selectedId:`P0`,selectedIndex:0,previousId:`A`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`selectFirst from a later non-pinned tab stops at the first NON-pinned one, not at index 0`,derivedFrom:`pos = n_pinned_pages = 2 gives A, which is not the selected page, so no fallback (adw-tab-view.c:3776-3781)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`B`},{kind:`selectFirst`}],opResults:[!0,!0],changes:[{selectedId:`B`,selectedIndex:3,previousId:`P0`,interactive:!0},{selectedId:`A`,selectedIndex:2,previousId:`B`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:2},{rule:`selectFirst on the first PINNED tab does nothing — the hop only exists in the non-pinned direction`,derivedFrom:`pinned -> pos = 0 -> page == selected_page and the !pinned fallback does not apply (adw-tab-view.c:3776, :3784-3785)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`selectFirst`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`selectLast from the LAST pinned tab hops to the last non-pinned one`,derivedFrom:`pinned -> pos = n_pinned_pages - 1 = 1 gives P1 itself, and since pinned it falls back to nth(n_pages - 1) (adw-tab-view.c:3805-3811)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`P1`},{kind:`selectLast`}],opResults:[!0,!0],changes:[{selectedId:`P1`,selectedIndex:1,previousId:`P0`,interactive:!0},{selectedId:`B`,selectedIndex:3,previousId:`P1`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`B`,selectedIndex:3},{rule:`selectLast on the last non-pinned tab does nothing`,derivedFrom:`!pinned -> pos = n_pages - 1 = 3 gives B, no fallback for non-pinned, page == selected (adw-tab-view.c:3805, :3813-3814)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`B`},{kind:`selectLast`}],opResults:[!0,!1],changes:[{selectedId:`B`,selectedIndex:3,previousId:`P0`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`B`,selectedIndex:3},{rule:`selectNext STOPS at the last page — it does not wrap`,derivedFrom:"`if (pos >= self->n_pages - 1) return FALSE;` (adw-tab-view.c:3753-3754)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`selectNext`}],opResults:[!0,!1],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:2},{rule:`Ctrl+Tab WRAPS where selectNext stops`,derivedFrom:`select_page_cb forward branch: on select_next failure with last == FALSE it selects nth(0) (adw-tab-view.c:2035-2041)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`cycleNext`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0},{selectedId:`A`,selectedIndex:0,previousId:`C`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Ctrl+Shift+Tab wraps backwards to the last page`,derivedFrom:`select_page_cb backward branch: on select_previous failure with last == FALSE it selects nth(n_pages - 1) (adw-tab-view.c:2022-2028)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`cyclePrevious`}],opResults:[!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:2},{rule:`Ctrl+Tab on a single-page view does nothing and rings nothing — the shortcut propagates to whatever contains the view`,derivedFrom:"`if (self->n_pages <= 1) return GDK_EVENT_PROPAGATE;` (adw-tab-view.c:2008)",pages:[{id:`A`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`cycleNext`},{kind:`cyclePrevious`}],opResults:[!1,!1],changes:[],order:[`A`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Alt+0 maps to page index 9 and is ignored on a shorter view`,derivedFrom:"`if (n_page >= self->n_pages) return GDK_EVENT_PROPAGATE;` with Alt+0 mapped to n_page 9 (adw-tab-view.c:2145, :2149-2150)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:9}],opResults:[!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Alt+1 on the already-selected page changes nothing and notifies nothing`,derivedFrom:"`if (adw_tab_view_get_selected_page (self) == page) return GDK_EVENT_PROPAGATE;` (adw-tab-view.c:2158-2159)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:0}],opResults:[!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`REGRESSION PIN — a negative and a FRACTIONAL index are both refused. NS stored 1.7, so no page index matched it, every page collapsed and a notify still fired with selected: 1.7`,derivedFrom:"adw_tab_view_get_nth_page takes an `int` and asserts `position >= 0` / `position < n_pages` (adw-tab-view.c:4126-4134); no fractional and no clamping path exists anywhere in the file",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:-1},{kind:`selectNth`,n:1.7},{kind:`selectNth`,n:99}],opResults:[!1,!1,!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`selection is keyed by IDENTITY, so two tabs with the same title are still distinguishable`,derivedFrom:`libadwaita keys selection by AdwTabPage pointer, never by title (adw_tab_view_set_selected_page, adw-tab-view.c:3682-3695); the string id is the platform-neutral stand-in`,pages:[{id:`page-1`,title:`Untitled`},{id:`page-2`,title:`Untitled`}],setupChanges:AUTO_SELECT(`page-1`),ops:[{kind:`select`,id:`page-2`}],opResults:[!0],changes:[{selectedId:`page-2`,selectedIndex:1,previousId:`page-1`,interactive:!0}],order:[`page-1`,`page-2`],nPinnedPages:0,selectedId:`page-2`,selectedIndex:1},{rule:`selecting an unknown id leaves the selection alone and records the precondition C asserts`,derivedFrom:"`g_return_if_fail (page_belongs_to_this_view (self, selected_page))` (adw-tab-view.c:3689)",pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`does-not-exist`}],opResults:[!1],changes:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_set_selected_page: assertion 'page_belongs_to_this_view (self, selected_page)' failed`]},{rule:`selecting null is legal ONLY while the view is empty`,derivedFrom:`the n_pages > 0 branch requires a real page; only the else branch accepts NULL (adw-tab-view.c:3687-3693)`,pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:null}],opResults:[!1],changes:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_set_selected_page: assertion 'ADW_IS_TAB_PAGE (selected_page)' failed`]},{rule:`the first NON-pinned tab cannot be dragged backwards into pinned territory`,derivedFrom:"first = n_pinned_pages = 2, pos = 2, `if (pos <= first) return FALSE;` (adw-tab-view.c:4597-4600)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderBackward`,id:`A`}],opResults:[!1],changes:[],pagesChanges:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`the last PINNED tab cannot be dragged forwards out of the pinned prefix`,derivedFrom:"last = n_pinned_pages - 1 = 1, pos = 1, `if (pos >= last) return FALSE;` (adw-tab-view.c:4628-4631)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderForward`,id:`P1`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`reorderFirst on a page already first in its partition returns false rather than moving it into the other partition`,derivedFrom:`reorder_first targets pos = n_pinned_pages = 2, which equals A's position, and reorder_page returns FALSE when original_pos == position (adw-tab-view.c:4657, :4552-4553)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderFirst`,id:`A`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`reorderLast on a pinned page stops at the END OF THE PINNED PREFIX, and the selection follows the page it is on`,derivedFrom:`pinned -> pos = n_pinned_pages - 1 = 1 (adw-tab-view.c:4683), then reorder_page moves it (:4557-4558)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderLast`,id:`P0`}],opResults:[!0],changes:[],pagesChanges:[{kind:`reordered`,id:`P0`,position:1,previousPosition:0}],order:[`P1`,`P0`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:1},{rule:`reorderPage moves a page and emits a reordered change — and notifies NO selection change, because the selected page never changed`,derivedFrom:`remove at original_pos then insert at position, then emit page-reordered (adw-tab-view.c:4553-4561)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`reorder`,id:`A`,position:2}],opResults:[!0],changes:[],pagesChanges:[{kind:`reordered`,id:`A`,position:2,previousPosition:0}],order:[`B`,`C`,`A`],nPinnedPages:0,selectedId:`A`,selectedIndex:2},{rule:`reordering a non-pinned page into the pinned prefix is refused`,derivedFrom:"non-pinned branch: `g_return_val_if_fail (position >= self->n_pinned_pages, FALSE)` (adw-tab-view.c:4546)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorder`,id:`A`,position:1}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_reorder_page: assertion 'position >= self->n_pinned_pages' failed`]},{rule:`detaching a parent re-points its children at the GRANDparent, so the successor rule keeps working for them`,derivedFrom:`page_parent_notify_cb re-parents to the grandparent when the parent page is finalized (adw-tab-view.c:293-303); detach_page drops the last reference (:1915, :1938)`,pages:[{id:`G`},{id:`P`,parentId:`G`},{id:`C`,parentId:`P`},{id:`Z`}],setupChanges:AUTO_SELECT(`G`),ops:[{kind:`detach`,id:`P`},{kind:`select`,id:`C`},{kind:`closePage`,id:`C`}],opResults:[!0,!0,!0],changes:[{selectedId:`C`,selectedIndex:1,previousId:`G`,interactive:!0},{selectedId:`G`,selectedIndex:0,previousId:`C`,interactive:!1}],order:[`G`,`Z`],nPinnedPages:0,selectedId:`G`,selectedIndex:0},{rule:`a page title is LIVE: setting it emits an updated change, and null coerces to the empty string`,derivedFrom:'`g_set_str (&self->title, title ? title : "")` then notify::title (adw-tab-view.c:3021-3024), which AdwTab connects to in order to re-render the label (adw-tab.c:930-931)',pages:[{id:`A`,title:`One`},{id:`B`,title:`Two`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setTitle`,id:`B`,title:`Renamed`},{kind:`setTitle`,id:`B`,title:`Renamed`},{kind:`setTitle`,id:`B`,title:null}],opResults:[!0,!1,!0],changes:[],pagesChanges:[{kind:`updated`,id:`B`,position:1,previousPosition:1},{kind:`updated`,id:`B`,position:1,previousPosition:1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`a duplicate page id is refused — two pages sharing an id would be two pages sharing an AdwTabPage pointer`,derivedFrom:`every lookup in adw-tab-view.c compares AdwTabPage POINTERS (get_page_position, :4160-4165), a relation the string id stands in for; C cannot reach a duplicate, so refusing is the only unambiguous reading`,pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`appendPage`,page:{id:`A`}}],opResults:[-1],changes:[],pagesChanges:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_insert: assertion 'page id 'A' is unique' failed`]}];function seedTabViewPages(e,t){for(let n of t){let t={id:n.id,title:n.title};n.parentId===void 0?n.pinned?e.appendPinnedPage(t):e.appendPage(t):e.addPage(t,n.parentId)}}function applyTabViewOp(e,t){switch(t.kind){case`select`:return e.setSelectedPage(t.id);case`selectNth`:return e.selectNthPage(t.n);case`selectPrevious`:return e.selectPreviousPage();case`selectNext`:return e.selectNextPage();case`selectFirst`:return e.selectFirstPage();case`selectLast`:return e.selectLastPage();case`cycleNext`:return e.cycleNextPage();case`cyclePrevious`:return e.cyclePreviousPage();case`addPage`:return e.addPage({id:t.page.id,title:t.page.title},t.parentId);case`insertPage`:return e.insertPage({id:t.page.id,title:t.page.title},t.position);case`prependPage`:return e.prependPage({id:t.page.id,title:t.page.title});case`appendPage`:return e.appendPage({id:t.page.id,title:t.page.title});case`insertPinnedPage`:return e.insertPinnedPage({id:t.page.id,title:t.page.title},t.position);case`prependPinnedPage`:return e.prependPinnedPage({id:t.page.id,title:t.page.title});case`appendPinnedPage`:return e.appendPinnedPage({id:t.page.id,title:t.page.title});case`setPinned`:return e.setPagePinned(t.id,t.pinned);case`closePage`:return e.closePage(t.id);case`closePageFinish`:return e.closePageFinish(t.id,t.confirm);case`closeOtherPages`:return e.closeOtherPages(t.id),null;case`closePagesBefore`:return e.closePagesBefore(t.id),null;case`closePagesAfter`:return e.closePagesAfter(t.id),null;case`detach`:return e.detachPage(t.id)!==null;case`reorder`:return e.reorderPage(t.id,t.position);case`reorderBackward`:return e.reorderBackward(t.id);case`reorderForward`:return e.reorderForward(t.id);case`reorderFirst`:return e.reorderFirst(t.id);case`reorderLast`:return e.reorderLast(t.id);case`setTitle`:return e.setPageTitle(t.id,t.title)}}function tabViewOrder(e){return e.pages.map(e=>e.id)}function tabViewClosing(e){return e.pages.filter(t=>e.isClosing(t.id)).map(e=>e.id)}const n=[{rule:`closing a page that is not selected moves nothing`,derivedFrom:"`if (page != self->selected_page) return;` (adw-tab-view.c:1864-1865)",pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`A`,selectedId:`C`,successorId:`C`},{rule:`a parentless page falls to the NEXT page`,derivedFrom:"`if (adw_tab_view_select_next_page (self)) return;` (adw-tab-view.c:1893-1894)",pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`B`,selectedId:`B`,successorId:`C`},{rule:`the last page falls to the previous one`,derivedFrom:`select_next_page fails, so adw_tab_view_select_previous_page runs (adw-tab-view.c:1896)`,pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`C`,selectedId:`C`,successorId:`B`},{rule:`the only page leaves nothing selected`,derivedFrom:`neither select_next_page nor select_previous_page can move; detach_page then sets NULL (adw-tab-view.c:1912-1913)`,pages:[{id:`A`}],closingId:`A`,selectedId:`A`,successorId:null},{rule:`a page IS its own descendant, so "the previous page is the opener" selects the opener`,derivedFrom:`is_descendant_of exits the while-loop immediately for page == parent (adw-tab-view.c:1735-1742), reached from :1874`,pages:[{id:`P`},{id:`X`,parentId:`P`},{id:`Y`}],closingId:`X`,selectedId:`X`,successorId:`P`},{rule:`a sibling opened from the same parent wins over the next page`,derivedFrom:`is_descendant_of (prev_page, parent) with prev_page.parent == parent (adw-tab-view.c:1874-1877)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`},{id:`Z`}],closingId:`C2`,selectedId:`C2`,successorId:`C1`},{rule:`an INDIRECT descendant counts — the walk follows the whole parent chain`,derivedFrom:"`while (page && page != parent) page = adw_tab_page_get_parent (page);` (adw-tab-view.c:1738-1739)",pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`G1`,parentId:`C1`},{id:`C2`,parentId:`P`}],closingId:`C2`,selectedId:`C2`,successorId:`G1`},{rule:`when the previous page is a DIFFERENT pinned tab, the pinned parent is selected instead`,derivedFrom:"`if (adw_tab_page_get_pinned (prev_page) && adw_tab_page_get_pinned (parent))` (adw-tab-view.c:1885-1890)",pages:[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`X`,parentId:`P0`}],closingId:`X`,selectedId:`X`,successorId:`P0`},{rule:`an unrelated previous page with a NON-pinned parent falls through to the ordinary next/previous rule`,derivedFrom:`neither the descendant branch nor the both-pinned branch fires, so :1893-1896 decides`,pages:[{id:`P`},{id:`U`},{id:`X`,parentId:`P`},{id:`Z`}],closingId:`X`,selectedId:`X`,successorId:`Z`},{rule:`a page with a parent that is FIRST in the list skips the parent rules entirely (pos > 0 fails)`,derivedFrom:"`if (parent && pos > 0)` (adw-tab-view.c:1867)",pages:[{id:`X`,parentId:`P`},{id:`Y`}],closingId:`X`,selectedId:`X`,successorId:`Y`}],r=[{rule:`a page IS its own descendant — the loop condition fails before the first step`,pages:[{id:`P`}],pageId:`P`,parentId:`P`,descendant:!0},{rule:`a direct child is a descendant`,pages:[{id:`P`},{id:`C`,parentId:`P`}],pageId:`C`,parentId:`P`,descendant:!0},{rule:`an indirect child is a descendant`,pages:[{id:`P`},{id:`C`,parentId:`P`},{id:`G`,parentId:`C`}],pageId:`G`,parentId:`P`,descendant:!0},{rule:`an unrelated page is not`,pages:[{id:`P`},{id:`U`}],pageId:`U`,parentId:`P`,descendant:!1},{rule:`the relation is not symmetric — the parent is not a descendant of its child`,pages:[{id:`P`},{id:`C`,parentId:`P`}],pageId:`P`,parentId:`C`,descendant:!1},{rule:`a null page reaches nothing`,pages:[{id:`P`}],pageId:null,parentId:`P`,descendant:!1}],i=[{autohide:!0,nPages:1,nPinnedPages:0,isTransferringPage:!1,revealed:!1,rule:`a lone ordinary tab hides the bar`},{autohide:!0,nPages:2,nPinnedPages:0,isTransferringPage:!1,revealed:!0,rule:`two tabs keep it up`},{autohide:!0,nPages:1,nPinnedPages:1,isTransferringPage:!1,revealed:!0,rule:`a single PINNED tab keeps the bar revealed — the clause missing from the web port`},{autohide:!0,nPages:0,nPinnedPages:0,isTransferringPage:!0,revealed:!0,rule:`a tab transfer in flight keeps the bar up so there is somewhere to drop`},{autohide:!0,nPages:0,nPinnedPages:0,isTransferringPage:!1,revealed:!1,rule:`an empty view with autohide hides the bar`},{autohide:!1,nPages:0,nPinnedPages:0,isTransferringPage:!1,revealed:!0,rule:`autohide off short-circuits to revealed, even with no pages at all`}],a=[{hovering:!1,fullyVisible:!0,selected:!0,dragging:!1,pinned:!1,visible:!0,rule:`the selected tab always shows it`},{hovering:!0,fullyVisible:!0,selected:!1,dragging:!1,pinned:!1,visible:!0,rule:`a fully-visible hovered tab shows it`},{hovering:!0,fullyVisible:!1,selected:!1,dragging:!1,pinned:!1,visible:!1,rule:`a hovered but partially scrolled-out tab does NOT`},{hovering:!1,fullyVisible:!0,selected:!1,dragging:!0,pinned:!1,visible:!0,rule:`a dragged tab shows it even unhovered`},{hovering:!1,fullyVisible:!0,selected:!1,dragging:!1,pinned:!1,visible:!1,rule:`an idle background tab shows nothing`},{hovering:!0,fullyVisible:!0,selected:!0,dragging:!0,pinned:!0,visible:!1,rule:`a PINNED tab never shows a close button, whatever else is true`}],o=[{tooltip:``,title:`Rechnungen 2026 – Übersicht 日本語`,text:`Rechnungen 2026 – Übersicht 日本語`,markup:!1,rule:`the title fallback is plain text and non-ASCII survives byte for byte`},{tooltip:`<b>build failed</b>`,title:`main.c`,text:`<b>build failed</b>`,markup:!0,rule:`a non-empty tooltip wins and is MARKUP — a renderer must not push it through an HTML sink`},{tooltip:``,title:``,text:``,markup:!1,rule:`no tooltip and no title is the empty string, not undefined`},{tooltip:` `,title:`main.c`,text:` `,markup:!0,rule:`only the EMPTY string falls back — g_strcmp0 (tooltip, "") is the whole test, so a space is a tooltip`}],s=[{icon:`text-x-generic`,indicatorIcon:null,loading:!0,pinned:!1,defaultIcon:`application-x-executable`,resolvedIcon:`text-x-generic`,spinner:!0,iconVisible:!0,indicatorVisible:!1,rule:`loading draws a spinner in the slot WITHOUT dropping the icon name`},{icon:null,indicatorIcon:null,loading:!1,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:`application-x-executable`,spinner:!1,iconVisible:!0,indicatorVisible:!1,rule:`a pinned page with no icon falls back to the view default-icon`},{icon:null,indicatorIcon:null,loading:!1,pinned:!1,defaultIcon:`application-x-executable`,resolvedIcon:null,spinner:!1,iconVisible:!1,indicatorVisible:!1,rule:`the default-icon fallback is PINNED-only — an ordinary tab with no icon shows none`},{icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!1,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:`text-x-generic`,spinner:!1,iconVisible:!1,indicatorVisible:!0,rule:`on a pinned tab the indicator REPLACES the icon — a pinned tab is a single-glyph chip`},{icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!1,pinned:!1,defaultIcon:null,resolvedIcon:`text-x-generic`,spinner:!1,iconVisible:!0,indicatorVisible:!0,rule:`an ordinary tab shows icon AND indicator side by side`},{icon:null,indicatorIcon:null,loading:!0,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:null,spinner:!0,iconVisible:!0,indicatorVisible:!1,rule:`a LOADING pinned page does not pick up the default icon — only the !loading branch assigns it`}],c=[{rule:`an omitted title is the empty string, never undefined — NS rendered the literal text "undefined" for a page without one`,derivedFrom:`adw_tab_page_set_title, adw-tab-view.c:3021`,spec:{id:`a`},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`an explicit null title coerces to the empty string too`,derivedFrom:'`title ? title : ""` (adw-tab-view.c:3021)',spec:{id:`a`,title:null},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`a non-ASCII title is stored byte for byte, with no normalization`,derivedFrom:`g_set_str copies the UTF-8 string verbatim (adw-tab-view.c:3021)`,spec:{id:`a`,title:`Übersicht 日本語`},title:`Übersicht 日本語`,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`an absent icon stays NULL — unlike a view-stack icon name, which resolves to the empty string`,derivedFrom:"PAGE_PROP_ICON is a GIcon, and update_icons branches on `gicon != NULL` (adw-tab.c:194)",spec:{id:`a`,icon:null,indicatorIcon:null},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`every declared field survives`,derivedFrom:`adw_tab_page_set_{title,tooltip,icon,indicator_icon,loading,needs_attention} (adw-tab-view.c:3016-3352)`,spec:{id:`a`,title:`main.c`,tooltip:`<b>build failed</b>`,icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!0,needsAttention:!0},title:`main.c`,tooltip:`<b>build failed</b>`,icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!0,needsAttention:!0}];export{i as TABS_REVEALED_VECTORS,a as TAB_CLOSE_VISIBLE_VECTORS,r as TAB_DESCENDANT_VECTORS,s as TAB_ICON_STATE_VECTORS,c as TAB_PAGE_DESCRIPTOR_VECTORS,n as TAB_SUCCESSOR_VECTORS,o as TAB_TOOLTIP_VECTORS,t as TAB_VIEW_VECTORS,applyTabViewOp,seedTabViewPages,tabViewClosing,tabViewOrder};
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";const e=[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`A`},{id:`B`}],AUTO_SELECT=e=>[{selectedId:e,selectedIndex:0,previousId:null,interactive:!1}],t=[{rule:`closing the selected page selects the NEXT one and removes it — web removed nothing at all, so every close was permanently denied`,derivedFrom:`close_page_cb confirms a non-pinned page (adw-tab-view.c:1990-1991); select_previous_page falls through to adw_tab_view_select_next_page (:1893) which succeeds at pos 1 < n_pages-1 (:3753); detach_page removes at :1915`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closePage`,id:`B`}],opResults:[!0,!0],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0},{selectedId:`C`,selectedIndex:2,previousId:`B`,interactive:!1}],pagesChanges:[{kind:`detached`,id:`B`,position:1,previousPosition:1}],order:[`A`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1},{rule:`closing the LAST page falls back to the previous one`,derivedFrom:`select_next_page returns FALSE at pos >= n_pages-1 (adw-tab-view.c:3753), so select_previous_page runs (:1896, :3723)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`closePage`,id:`C`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0},{selectedId:`B`,selectedIndex:1,previousId:`C`,interactive:!1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`B`,selectedIndex:1},{rule:`closing a page BEFORE the selection keeps the same page selected, shifts its index down, and emits NOTHING`,derivedFrom:`select_previous_page early-returns because page != selected_page (adw-tab-view.c:1864-1865), so set_selected_page and its notify (:1854) are never reached`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`closePage`,id:`A`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1},{rule:`closing the ONLY page empties the view: no selection, index -1 — both ports reported index 0 for a page-less view, and NS refused the close outright`,derivedFrom:"detach_page: `if (self->n_pages == 1) set_selected_page (self, NULL, !in_dispose);` (adw-tab-view.c:1912-1913)",pages:[{id:`A`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`A`}],opResults:[!0],changes:[{selectedId:null,selectedIndex:-1,previousId:`A`,interactive:!1}],pagesChanges:[{kind:`detached`,id:`A`,position:0,previousPosition:0}],order:[],nPinnedPages:0,selectedId:null,selectedIndex:-1},{rule:`a page opened from a parent falls back to the SIBLING opened before it, not to the next page`,derivedFrom:`select_previous_page: parent is set and pos > 0, prev is a descendant of the parent -> select prev (adw-tab-view.c:1869-1878)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`select`,id:`C2`},{kind:`closePage`,id:`C2`}],opResults:[!0,!0],changes:[{selectedId:`C2`,selectedIndex:2,previousId:`P`,interactive:!0},{selectedId:`C1`,selectedIndex:1,previousId:`C2`,interactive:!1}],order:[`P`,`C1`],nPinnedPages:0,selectedId:`C1`,selectedIndex:1},{rule:`closing a tab you opened from another tab lands back on the OPENER, not on the next tab — the rule both ports lack entirely`,derivedFrom:`is_descendant_of returns TRUE for page == parent because the while-loop exits immediately (adw-tab-view.c:1735-1742), so prev == parent hits the descendant branch (:1874-1877) instead of falling through to select_next_page`,pages:[{id:`P`},{id:`X`,parentId:`P`},{id:`Y`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`select`,id:`X`},{kind:`closePage`,id:`X`}],opResults:[!0,!0],changes:[{selectedId:`X`,selectedIndex:1,previousId:`P`,interactive:!0},{selectedId:`P`,selectedIndex:0,previousId:`X`,interactive:!1}],order:[`P`,`Y`],nPinnedPages:0,selectedId:`P`,selectedIndex:0},{rule:`with a PINNED parent the previous page is a different pinned tab, so the parent is selected directly`,derivedFrom:`prev is not a descendant of the parent, but prev.pinned && parent.pinned holds -> select the parent (adw-tab-view.c:1880-1890). A page opened from a pinned parent is placed after the LAST pinned page, which is why the previous page need not be the parent.`,pages:[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`X`,parentId:`P0`}],setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`X`},{kind:`closePage`,id:`X`}],opResults:[!0,!0],changes:[{selectedId:`X`,selectedIndex:2,previousId:`P0`,interactive:!0},{selectedId:`P0`,selectedIndex:0,previousId:`X`,interactive:!1}],order:[`P0`,`P1`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`a PINNED page is denied by the default handler: nothing is removed and the page is no longer closing`,derivedFrom:"close_page_cb calls close_page_finish with `!adw_tab_page_get_pinned (page)` (adw-tab-view.c:1990-1991); close_page_finish clears the flag then returns on !confirm (:4428-4431)",pages:[{id:`A`,pinned:!0},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`A`}],opResults:[!0],changes:[],closeAttempts:[`A`],order:[`A`,`B`],nPinnedPages:1,selectedId:`A`,selectedIndex:0,closing:[]},{rule:`a deferred close is re-entrant-safe: the second request is ignored and the handler does NOT run again — the seam that lets an app show "save before closing?"`,derivedFrom:"`if (page->closing) return;` (adw-tab-view.c:4396-4397); close_page_finish clears the flag and returns without detaching when confirm is FALSE (:4428-4431)",pages:[{id:`A`},{id:`B`},{id:`C`}],handler:`defer`,setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePage`,id:`B`},{kind:`closePage`,id:`B`},{kind:`closePageFinish`,id:`B`,confirm:!1}],opResults:[!0,!1,!1],changes:[],closeAttempts:[`B`],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,closing:[]},{rule:`a deferred close that is later CONFIRMED detaches the page, successor rule and all`,derivedFrom:`close_page_finish with confirm TRUE calls detach_page (adw-tab-view.c:4436)`,pages:[{id:`A`},{id:`B`},{id:`C`}],handler:`defer`,setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closePage`,id:`B`},{kind:`closePageFinish`,id:`B`,confirm:!0}],opResults:[!0,!0,!0],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0},{selectedId:`C`,selectedIndex:2,previousId:`B`,interactive:!1}],closeAttempts:[`B`],order:[`A`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:1,closing:[]},{rule:`closePagesAfter walks DESCENDING — the order is part of the spec, because each confirmed close shifts every later index`,derivedFrom:"`for (i = self->n_pages - 1; i > pos; i--)` (adw-tab-view.c:4511)",pages:[{id:`A`},{id:`B`},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`closePagesAfter`,id:`B`}],opResults:[null],changes:[],closeAttempts:[`D`,`C`],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`closePagesBefore walks DESCENDING too`,derivedFrom:"`for (i = pos - 1; i >= 0; i--)` (adw-tab-view.c:4485)",pages:[{id:`A`},{id:`B`},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`D`},{kind:`closePagesBefore`,id:`C`}],opResults:[!0,null],changes:[{selectedId:`D`,selectedIndex:3,previousId:`A`,interactive:!0}],closeAttempts:[`B`,`A`],order:[`C`,`D`],nPinnedPages:0,selectedId:`D`,selectedIndex:1},{rule:`closeOtherPages skips the kept page and leaves the selection on it throughout`,derivedFrom:"`for (i = self->n_pages - 1; i >= 0; i--)` with `if (p == page) continue;` (adw-tab-view.c:4456-4462)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`B`},{kind:`closeOtherPages`,id:`B`}],opResults:[!0,null],changes:[{selectedId:`B`,selectedIndex:1,previousId:`A`,interactive:!0}],closeAttempts:[`C`,`A`],order:[`B`],nPinnedPages:0,selectedId:`B`,selectedIndex:0},{rule:`pinning moves the page to the end of the pinned prefix and grows the prefix`,derivedFrom:`old_pos 2 removed, new_pos = n_pinned_pages = 1, insert at 1, n_pinned = new_pos + 1 = 2 (adw-tab-view.c:4062-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`C`,pinned:!0}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`C`,position:1,previousPosition:2}],order:[`A`,`C`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:0},{rule:`unpinning moves the page to just BEFORE the other non-pinned pages`,derivedFrom:`old_pos 0 removed, new_pos = 2 - 1 = 1, insert at 1, n_pinned = new_pos + 0 = 1 (adw-tab-view.c:4066-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`,pinned:!0},{id:`C`},{id:`D`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`A`,pinned:!1}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`A`,position:1,previousPosition:0}],order:[`B`,`A`,`C`,`D`],nPinnedPages:1,selectedId:`A`,selectedIndex:1},{rule:`unpinning the LAST pinned page changes the count without moving anything — new_pos lands exactly where the page already was`,derivedFrom:`old_pos 1 removed -> [A,C]; new_pos = 2 - 1 = 1; insert at 1 -> [A,B,C]; n_pinned = 1 (adw-tab-view.c:4066-4077)`,pages:[{id:`A`,pinned:!0},{id:`B`,pinned:!0},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`B`,pinned:!1}],opResults:[1],changes:[],pagesChanges:[{kind:`pinned`,id:`B`,position:1,previousPosition:1}],order:[`A`,`B`,`C`],nPinnedPages:1,selectedId:`A`,selectedIndex:0},{rule:`pinning an already-pinned page is a no-op that emits nothing`,derivedFrom:"`if (adw_tab_page_get_pinned (page) == pinned) return;` (adw-tab-view.c:4059-4060)",pages:[{id:`A`,pinned:!0},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setPinned`,id:`A`,pinned:!0}],opResults:[-1],changes:[],pagesChanges:[],order:[`A`,`B`],nPinnedPages:1,selectedId:`A`,selectedIndex:0},{rule:`addPage inserts after the parent AND after every consecutive descendant of it, so links opened from one tab keep their order`,derivedFrom:`position starts at pos(P) = 0, then the do/while advances past every consecutive descendant of P and stops at X (adw-tab-view.c:4208-4217)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`},{id:`X`}],setupChanges:AUTO_SELECT(`P`),ops:[{kind:`addPage`,page:{id:`N`},parentId:`P`}],opResults:[3],changes:[],pagesChanges:[{kind:`attached`,id:`N`,position:3,previousPosition:-1}],order:[`P`,`C1`,`C2`,`N`,`X`],nPinnedPages:0,selectedId:`P`,selectedIndex:0},{rule:`a PINNED parent inserts after the last pinned page, and the new page is itself NOT pinned`,derivedFrom:`a pinned parent sets position = n_pinned_pages - 1 = 1 and the loop increments to 2 (adw-tab-view.c:4205-4217); create_and_insert_page is called with pinned = FALSE (:4222)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`addPage`,page:{id:`N`},parentId:`P0`}],opResults:[2],changes:[],order:[`P0`,`P1`,`N`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`a null parent appends`,derivedFrom:"`position = self->n_pages;` for a NULL parent (adw-tab-view.c:4219)",pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`addPage`,page:{id:`N`},parentId:null}],opResults:[2],changes:[],order:[`A`,`B`,`N`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`the FIRST page added auto-selects and notifies; the second does not — and the attach is heard before the selection, so a renderer has built the tab by then`,derivedFrom:"insert_page auto-selects only when there is no selection: `if (!self->selected_page) set_selected_page (self, page, FALSE);` (adw-tab-view.c:1953-1954), inside the freeze/thaw that follows attach_page's page-attached signal (:1748-1778)",pages:[],setupChanges:[],ops:[{kind:`appendPage`,page:{id:`A`}},{kind:`appendPage`,page:{id:`B`}}],opResults:[0,1],changes:[{selectedId:`A`,selectedIndex:0,previousId:null,interactive:!1}],pagesChanges:[{kind:`attached`,id:`A`,position:0,previousPosition:-1},{kind:`attached`,id:`B`,position:1,previousPosition:-1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`a non-pinned insert BEFORE a pinned page is refused outright, not clamped`,derivedFrom:"`g_return_val_if_fail (position >= self->n_pinned_pages, NULL)` (adw-tab-view.c:4246)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`insertPage`,page:{id:`N`},position:1}],opResults:[-1],changes:[],pagesChanges:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_insert: assertion 'position >= self->n_pinned_pages' failed`]},{rule:`a pinned insert AFTER a non-pinned page is refused outright`,derivedFrom:"`g_return_val_if_fail (position <= self->n_pinned_pages, NULL)` (adw-tab-view.c:4313)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`insertPinnedPage`,page:{id:`N`},position:3}],opResults:[-1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_insert_pinned: assertion 'position <= self->n_pinned_pages' failed`]},{rule:`prepend inserts at the pinned boundary and shifts the selection with its page`,derivedFrom:"`create_and_insert_page (self, child, NULL, self->n_pinned_pages, FALSE)` (adw-tab-view.c:4268)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`A`},{kind:`prependPage`,page:{id:`N`}}],opResults:[!0,2],changes:[{selectedId:`A`,selectedIndex:2,previousId:`P0`,interactive:!0}],order:[`P0`,`P1`,`N`,`A`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:3},{rule:`appendPinnedPage grows the pinned prefix and pushes the non-pinned pages back`,derivedFrom:"`create_and_insert_page (self, child, NULL, self->n_pinned_pages, TRUE)` (adw-tab-view.c:4356)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`appendPinnedPage`,page:{id:`P2`}}],opResults:[2],changes:[],order:[`P0`,`P1`,`P2`,`A`,`B`],nPinnedPages:3,selectedId:`P0`,selectedIndex:0},{rule:`selectFirst from the FIRST non-pinned tab hops the partition boundary into pinned territory`,derivedFrom:`pos = n_pinned_pages = 2 gives A itself, and since !pinned it falls back to nth(0) (adw-tab-view.c:3776-3782)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`A`},{kind:`selectFirst`}],opResults:[!0,!0],changes:[{selectedId:`A`,selectedIndex:2,previousId:`P0`,interactive:!0},{selectedId:`P0`,selectedIndex:0,previousId:`A`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`selectFirst from a later non-pinned tab stops at the first NON-pinned one, not at index 0`,derivedFrom:`pos = n_pinned_pages = 2 gives A, which is not the selected page, so no fallback (adw-tab-view.c:3776-3781)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`B`},{kind:`selectFirst`}],opResults:[!0,!0],changes:[{selectedId:`B`,selectedIndex:3,previousId:`P0`,interactive:!0},{selectedId:`A`,selectedIndex:2,previousId:`B`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`A`,selectedIndex:2},{rule:`selectFirst on the first PINNED tab does nothing — the hop only exists in the non-pinned direction`,derivedFrom:`pinned -> pos = 0 -> page == selected_page and the !pinned fallback does not apply (adw-tab-view.c:3776, :3784-3785)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`selectFirst`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`selectLast from the LAST pinned tab hops to the last non-pinned one`,derivedFrom:`pinned -> pos = n_pinned_pages - 1 = 1 gives P1 itself, and since pinned it falls back to nth(n_pages - 1) (adw-tab-view.c:3805-3811)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`P1`},{kind:`selectLast`}],opResults:[!0,!0],changes:[{selectedId:`P1`,selectedIndex:1,previousId:`P0`,interactive:!0},{selectedId:`B`,selectedIndex:3,previousId:`P1`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`B`,selectedIndex:3},{rule:`selectLast on the last non-pinned tab does nothing`,derivedFrom:`!pinned -> pos = n_pages - 1 = 3 gives B, no fallback for non-pinned, page == selected (adw-tab-view.c:3805, :3813-3814)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`select`,id:`B`},{kind:`selectLast`}],opResults:[!0,!1],changes:[{selectedId:`B`,selectedIndex:3,previousId:`P0`,interactive:!0}],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`B`,selectedIndex:3},{rule:`selectNext STOPS at the last page — it does not wrap`,derivedFrom:"`if (pos >= self->n_pages - 1) return FALSE;` (adw-tab-view.c:3753-3754)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`selectNext`}],opResults:[!0,!1],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:2},{rule:`Ctrl+Tab WRAPS where selectNext stops`,derivedFrom:`select_page_cb forward branch: on select_next failure with last == FALSE it selects nth(0) (adw-tab-view.c:2035-2041)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`C`},{kind:`cycleNext`}],opResults:[!0,!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0},{selectedId:`A`,selectedIndex:0,previousId:`C`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Ctrl+Shift+Tab wraps backwards to the last page`,derivedFrom:`select_page_cb backward branch: on select_previous failure with last == FALSE it selects nth(n_pages - 1) (adw-tab-view.c:2022-2028)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`cyclePrevious`}],opResults:[!0],changes:[{selectedId:`C`,selectedIndex:2,previousId:`A`,interactive:!0}],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`C`,selectedIndex:2},{rule:`Ctrl+Tab on a single-page view does nothing and rings nothing — the shortcut propagates to whatever contains the view`,derivedFrom:"`if (self->n_pages <= 1) return GDK_EVENT_PROPAGATE;` (adw-tab-view.c:2008)",pages:[{id:`A`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`cycleNext`},{kind:`cyclePrevious`}],opResults:[!1,!1],changes:[],order:[`A`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Alt+0 maps to page index 9 and is ignored on a shorter view`,derivedFrom:"`if (n_page >= self->n_pages) return GDK_EVENT_PROPAGATE;` with Alt+0 mapped to n_page 9 (adw-tab-view.c:2145, :2149-2150)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:9}],opResults:[!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`Alt+1 on the already-selected page changes nothing and notifies nothing`,derivedFrom:"`if (adw_tab_view_get_selected_page (self) == page) return GDK_EVENT_PROPAGATE;` (adw-tab-view.c:2158-2159)",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:0}],opResults:[!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`REGRESSION PIN — a negative and a FRACTIONAL index are both refused. NS stored 1.7, so no page index matched it, every page collapsed and a notify still fired with selected: 1.7`,derivedFrom:"adw_tab_view_get_nth_page takes an `int` and asserts `position >= 0` / `position < n_pages` (adw-tab-view.c:4126-4134); no fractional and no clamping path exists anywhere in the file",pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`selectNth`,n:-1},{kind:`selectNth`,n:1.7},{kind:`selectNth`,n:99}],opResults:[!1,!1,!1],changes:[],order:[`A`,`B`,`C`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`selection is keyed by IDENTITY, so two tabs with the same title are still distinguishable`,derivedFrom:`libadwaita keys selection by AdwTabPage pointer, never by title (adw_tab_view_set_selected_page, adw-tab-view.c:3682-3695); the string id is the platform-neutral stand-in`,pages:[{id:`page-1`,title:`Untitled`},{id:`page-2`,title:`Untitled`}],setupChanges:AUTO_SELECT(`page-1`),ops:[{kind:`select`,id:`page-2`}],opResults:[!0],changes:[{selectedId:`page-2`,selectedIndex:1,previousId:`page-1`,interactive:!0}],order:[`page-1`,`page-2`],nPinnedPages:0,selectedId:`page-2`,selectedIndex:1},{rule:`selecting an unknown id leaves the selection alone and records the precondition C asserts`,derivedFrom:"`g_return_if_fail (page_belongs_to_this_view (self, selected_page))` (adw-tab-view.c:3689)",pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:`does-not-exist`}],opResults:[!1],changes:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_set_selected_page: assertion 'page_belongs_to_this_view (self, selected_page)' failed`]},{rule:`selecting null is legal ONLY while the view is empty`,derivedFrom:`the n_pages > 0 branch requires a real page; only the else branch accepts NULL (adw-tab-view.c:3687-3693)`,pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`select`,id:null}],opResults:[!1],changes:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_set_selected_page: assertion 'ADW_IS_TAB_PAGE (selected_page)' failed`]},{rule:`the first NON-pinned tab cannot be dragged backwards into pinned territory`,derivedFrom:"first = n_pinned_pages = 2, pos = 2, `if (pos <= first) return FALSE;` (adw-tab-view.c:4597-4600)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderBackward`,id:`A`}],opResults:[!1],changes:[],pagesChanges:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`the last PINNED tab cannot be dragged forwards out of the pinned prefix`,derivedFrom:"last = n_pinned_pages - 1 = 1, pos = 1, `if (pos >= last) return FALSE;` (adw-tab-view.c:4628-4631)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderForward`,id:`P1`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`reorderFirst on a page already first in its partition returns false rather than moving it into the other partition`,derivedFrom:`reorder_first targets pos = n_pinned_pages = 2, which equals A's position, and reorder_page returns FALSE when original_pos == position (adw-tab-view.c:4657, :4552-4553)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderFirst`,id:`A`}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0},{rule:`reorderLast on a pinned page stops at the END OF THE PINNED PREFIX, and the selection follows the page it is on`,derivedFrom:`pinned -> pos = n_pinned_pages - 1 = 1 (adw-tab-view.c:4683), then reorder_page moves it (:4557-4558)`,pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorderLast`,id:`P0`}],opResults:[!0],changes:[],pagesChanges:[{kind:`reordered`,id:`P0`,position:1,previousPosition:0}],order:[`P1`,`P0`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:1},{rule:`reorderPage moves a page and emits a reordered change — and notifies NO selection change, because the selected page never changed`,derivedFrom:`remove at original_pos then insert at position, then emit page-reordered (adw-tab-view.c:4553-4561)`,pages:[{id:`A`},{id:`B`},{id:`C`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`reorder`,id:`A`,position:2}],opResults:[!0],changes:[],pagesChanges:[{kind:`reordered`,id:`A`,position:2,previousPosition:0}],order:[`B`,`C`,`A`],nPinnedPages:0,selectedId:`A`,selectedIndex:2},{rule:`reordering a non-pinned page into the pinned prefix is refused`,derivedFrom:"non-pinned branch: `g_return_val_if_fail (position >= self->n_pinned_pages, FALSE)` (adw-tab-view.c:4546)",pages:e,setupChanges:AUTO_SELECT(`P0`),ops:[{kind:`reorder`,id:`A`,position:1}],opResults:[!1],changes:[],order:[`P0`,`P1`,`A`,`B`],nPinnedPages:2,selectedId:`P0`,selectedIndex:0,diagnostics:[`adw_tab_view_reorder_page: assertion 'position >= self->n_pinned_pages' failed`]},{rule:`detaching a parent re-points its children at the GRANDparent, so the successor rule keeps working for them`,derivedFrom:`page_parent_notify_cb re-parents to the grandparent when the parent page is finalized (adw-tab-view.c:293-303); detach_page drops the last reference (:1915, :1938)`,pages:[{id:`G`},{id:`P`,parentId:`G`},{id:`C`,parentId:`P`},{id:`Z`}],setupChanges:AUTO_SELECT(`G`),ops:[{kind:`detach`,id:`P`},{kind:`select`,id:`C`},{kind:`closePage`,id:`C`}],opResults:[!0,!0,!0],changes:[{selectedId:`C`,selectedIndex:1,previousId:`G`,interactive:!0},{selectedId:`G`,selectedIndex:0,previousId:`C`,interactive:!1}],order:[`G`,`Z`],nPinnedPages:0,selectedId:`G`,selectedIndex:0},{rule:`a page title is LIVE: setting it emits an updated change, and null coerces to the empty string`,derivedFrom:'`g_set_str (&self->title, title ? title : "")` then notify::title (adw-tab-view.c:3021-3024), which AdwTab connects to in order to re-render the label (adw-tab.c:930-931)',pages:[{id:`A`,title:`One`},{id:`B`,title:`Two`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`setTitle`,id:`B`,title:`Renamed`},{kind:`setTitle`,id:`B`,title:`Renamed`},{kind:`setTitle`,id:`B`,title:null}],opResults:[!0,!1,!0],changes:[],pagesChanges:[{kind:`updated`,id:`B`,position:1,previousPosition:1},{kind:`updated`,id:`B`,position:1,previousPosition:1}],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0},{rule:`a duplicate page id is refused — two pages sharing an id would be two pages sharing an AdwTabPage pointer`,derivedFrom:`every lookup in adw-tab-view.c compares AdwTabPage POINTERS (get_page_position, :4160-4165), a relation the string id stands in for; C cannot reach a duplicate, so refusing is the only unambiguous reading`,pages:[{id:`A`},{id:`B`}],setupChanges:AUTO_SELECT(`A`),ops:[{kind:`appendPage`,page:{id:`A`}}],opResults:[-1],changes:[],pagesChanges:[],order:[`A`,`B`],nPinnedPages:0,selectedId:`A`,selectedIndex:0,diagnostics:[`adw_tab_view_insert: assertion 'page id 'A' is unique' failed`]}];function seedTabViewPages(e,t){for(let n of t){let t={id:n.id,title:n.title};n.parentId===void 0?n.pinned?e.appendPinnedPage(t):e.appendPage(t):e.addPage(t,n.parentId)}}function applyTabViewOp(e,t){switch(t.kind){case`select`:return e.setSelectedPage(t.id);case`selectNth`:return e.selectNthPage(t.n);case`selectPrevious`:return e.selectPreviousPage();case`selectNext`:return e.selectNextPage();case`selectFirst`:return e.selectFirstPage();case`selectLast`:return e.selectLastPage();case`cycleNext`:return e.cycleNextPage();case`cyclePrevious`:return e.cyclePreviousPage();case`addPage`:return e.addPage({id:t.page.id,title:t.page.title},t.parentId);case`insertPage`:return e.insertPage({id:t.page.id,title:t.page.title},t.position);case`prependPage`:return e.prependPage({id:t.page.id,title:t.page.title});case`appendPage`:return e.appendPage({id:t.page.id,title:t.page.title});case`insertPinnedPage`:return e.insertPinnedPage({id:t.page.id,title:t.page.title},t.position);case`prependPinnedPage`:return e.prependPinnedPage({id:t.page.id,title:t.page.title});case`appendPinnedPage`:return e.appendPinnedPage({id:t.page.id,title:t.page.title});case`setPinned`:return e.setPagePinned(t.id,t.pinned);case`closePage`:return e.closePage(t.id);case`closePageFinish`:return e.closePageFinish(t.id,t.confirm);case`closeOtherPages`:return e.closeOtherPages(t.id),null;case`closePagesBefore`:return e.closePagesBefore(t.id),null;case`closePagesAfter`:return e.closePagesAfter(t.id),null;case`detach`:return e.detachPage(t.id)!==null;case`reorder`:return e.reorderPage(t.id,t.position);case`reorderBackward`:return e.reorderBackward(t.id);case`reorderForward`:return e.reorderForward(t.id);case`reorderFirst`:return e.reorderFirst(t.id);case`reorderLast`:return e.reorderLast(t.id);case`setTitle`:return e.setPageTitle(t.id,t.title)}}function tabViewOrder(e){return e.pages.map(e=>e.id)}function tabViewClosing(e){return e.pages.filter(t=>e.isClosing(t.id)).map(e=>e.id)}const n=[{rule:`closing a page that is not selected moves nothing`,derivedFrom:"`if (page != self->selected_page) return;` (adw-tab-view.c:1864-1865)",pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`A`,selectedId:`C`,successorId:`C`},{rule:`a parentless page falls to the NEXT page`,derivedFrom:"`if (adw_tab_view_select_next_page (self)) return;` (adw-tab-view.c:1893-1894)",pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`B`,selectedId:`B`,successorId:`C`},{rule:`the last page falls to the previous one`,derivedFrom:`select_next_page fails, so adw_tab_view_select_previous_page runs (adw-tab-view.c:1896)`,pages:[{id:`A`},{id:`B`},{id:`C`}],closingId:`C`,selectedId:`C`,successorId:`B`},{rule:`the only page leaves nothing selected`,derivedFrom:`neither select_next_page nor select_previous_page can move; detach_page then sets NULL (adw-tab-view.c:1912-1913)`,pages:[{id:`A`}],closingId:`A`,selectedId:`A`,successorId:null},{rule:`a page IS its own descendant, so "the previous page is the opener" selects the opener`,derivedFrom:`is_descendant_of exits the while-loop immediately for page == parent (adw-tab-view.c:1735-1742), reached from :1874`,pages:[{id:`P`},{id:`X`,parentId:`P`},{id:`Y`}],closingId:`X`,selectedId:`X`,successorId:`P`},{rule:`a sibling opened from the same parent wins over the next page`,derivedFrom:`is_descendant_of (prev_page, parent) with prev_page.parent == parent (adw-tab-view.c:1874-1877)`,pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`C2`,parentId:`P`},{id:`Z`}],closingId:`C2`,selectedId:`C2`,successorId:`C1`},{rule:`an INDIRECT descendant counts — the walk follows the whole parent chain`,derivedFrom:"`while (page && page != parent) page = adw_tab_page_get_parent (page);` (adw-tab-view.c:1738-1739)",pages:[{id:`P`},{id:`C1`,parentId:`P`},{id:`G1`,parentId:`C1`},{id:`C2`,parentId:`P`}],closingId:`C2`,selectedId:`C2`,successorId:`G1`},{rule:`when the previous page is a DIFFERENT pinned tab, the pinned parent is selected instead`,derivedFrom:"`if (adw_tab_page_get_pinned (prev_page) && adw_tab_page_get_pinned (parent))` (adw-tab-view.c:1885-1890)",pages:[{id:`P0`,pinned:!0},{id:`P1`,pinned:!0},{id:`X`,parentId:`P0`}],closingId:`X`,selectedId:`X`,successorId:`P0`},{rule:`an unrelated previous page with a NON-pinned parent falls through to the ordinary next/previous rule`,derivedFrom:`neither the descendant branch nor the both-pinned branch fires, so :1893-1896 decides`,pages:[{id:`P`},{id:`U`},{id:`X`,parentId:`P`},{id:`Z`}],closingId:`X`,selectedId:`X`,successorId:`Z`},{rule:`a page with a parent that is FIRST in the list skips the parent rules entirely (pos > 0 fails)`,derivedFrom:"`if (parent && pos > 0)` (adw-tab-view.c:1867)",pages:[{id:`X`,parentId:`P`},{id:`Y`}],closingId:`X`,selectedId:`X`,successorId:`Y`}],r=[{rule:`a page IS its own descendant — the loop condition fails before the first step`,pages:[{id:`P`}],pageId:`P`,parentId:`P`,descendant:!0},{rule:`a direct child is a descendant`,pages:[{id:`P`},{id:`C`,parentId:`P`}],pageId:`C`,parentId:`P`,descendant:!0},{rule:`an indirect child is a descendant`,pages:[{id:`P`},{id:`C`,parentId:`P`},{id:`G`,parentId:`C`}],pageId:`G`,parentId:`P`,descendant:!0},{rule:`an unrelated page is not`,pages:[{id:`P`},{id:`U`}],pageId:`U`,parentId:`P`,descendant:!1},{rule:`the relation is not symmetric — the parent is not a descendant of its child`,pages:[{id:`P`},{id:`C`,parentId:`P`}],pageId:`P`,parentId:`C`,descendant:!1},{rule:`a null page reaches nothing`,pages:[{id:`P`}],pageId:null,parentId:`P`,descendant:!1}],i=[{autohide:!0,nPages:1,nPinnedPages:0,isTransferringPage:!1,revealed:!1,rule:`a lone ordinary tab hides the bar`},{autohide:!0,nPages:2,nPinnedPages:0,isTransferringPage:!1,revealed:!0,rule:`two tabs keep it up`},{autohide:!0,nPages:1,nPinnedPages:1,isTransferringPage:!1,revealed:!0,rule:`a single PINNED tab keeps the bar revealed — the clause missing from the web port`},{autohide:!0,nPages:0,nPinnedPages:0,isTransferringPage:!0,revealed:!0,rule:`a tab transfer in flight keeps the bar up so there is somewhere to drop`},{autohide:!0,nPages:0,nPinnedPages:0,isTransferringPage:!1,revealed:!1,rule:`an empty view with autohide hides the bar`},{autohide:!1,nPages:0,nPinnedPages:0,isTransferringPage:!1,revealed:!0,rule:`autohide off short-circuits to revealed, even with no pages at all`}],a=[{hovering:!1,fullyVisible:!0,selected:!0,dragging:!1,pinned:!1,visible:!0,rule:`the selected tab always shows it`},{hovering:!0,fullyVisible:!0,selected:!1,dragging:!1,pinned:!1,visible:!0,rule:`a fully-visible hovered tab shows it`},{hovering:!0,fullyVisible:!1,selected:!1,dragging:!1,pinned:!1,visible:!1,rule:`a hovered but partially scrolled-out tab does NOT`},{hovering:!1,fullyVisible:!0,selected:!1,dragging:!0,pinned:!1,visible:!0,rule:`a dragged tab shows it even unhovered`},{hovering:!1,fullyVisible:!0,selected:!1,dragging:!1,pinned:!1,visible:!1,rule:`an idle background tab shows nothing`},{hovering:!0,fullyVisible:!0,selected:!0,dragging:!0,pinned:!0,visible:!1,rule:`a PINNED tab never shows a close button, whatever else is true`}],o=[{tooltip:``,title:`Rechnungen 2026 – Übersicht 日本語`,text:`Rechnungen 2026 – Übersicht 日本語`,markup:!1,rule:`the title fallback is plain text and non-ASCII survives byte for byte`},{tooltip:`<b>build failed</b>`,title:`main.c`,text:`<b>build failed</b>`,markup:!0,rule:`a non-empty tooltip wins and is MARKUP — a renderer must not push it through an HTML sink`},{tooltip:``,title:``,text:``,markup:!1,rule:`no tooltip and no title is the empty string, not undefined`},{tooltip:` `,title:`main.c`,text:` `,markup:!0,rule:`only the EMPTY string falls back — g_strcmp0 (tooltip, "") is the whole test, so a space is a tooltip`}],s=[{icon:`text-x-generic`,indicatorIcon:null,loading:!0,pinned:!1,defaultIcon:`application-x-executable`,resolvedIcon:`text-x-generic`,spinner:!0,iconVisible:!0,indicatorVisible:!1,rule:`loading draws a spinner in the slot WITHOUT dropping the icon name`},{icon:null,indicatorIcon:null,loading:!1,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:`application-x-executable`,spinner:!1,iconVisible:!0,indicatorVisible:!1,rule:`a pinned page with no icon falls back to the view default-icon`},{icon:null,indicatorIcon:null,loading:!1,pinned:!1,defaultIcon:`application-x-executable`,resolvedIcon:null,spinner:!1,iconVisible:!1,indicatorVisible:!1,rule:`the default-icon fallback is PINNED-only — an ordinary tab with no icon shows none`},{icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!1,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:`text-x-generic`,spinner:!1,iconVisible:!1,indicatorVisible:!0,rule:`on a pinned tab the indicator REPLACES the icon — a pinned tab is a single-glyph chip`},{icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!1,pinned:!1,defaultIcon:null,resolvedIcon:`text-x-generic`,spinner:!1,iconVisible:!0,indicatorVisible:!0,rule:`an ordinary tab shows icon AND indicator side by side`},{icon:null,indicatorIcon:null,loading:!0,pinned:!0,defaultIcon:`application-x-executable`,resolvedIcon:null,spinner:!0,iconVisible:!0,indicatorVisible:!1,rule:`a LOADING pinned page does not pick up the default icon — only the !loading branch assigns it`}],c=[{rule:`an omitted title is the empty string, never undefined — NS rendered the literal text "undefined" for a page without one`,derivedFrom:`adw_tab_page_set_title, adw-tab-view.c:3021`,spec:{id:`a`},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`an explicit null title coerces to the empty string too`,derivedFrom:'`title ? title : ""` (adw-tab-view.c:3021)',spec:{id:`a`,title:null},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`a non-ASCII title is stored byte for byte, with no normalization`,derivedFrom:`g_set_str copies the UTF-8 string verbatim (adw-tab-view.c:3021)`,spec:{id:`a`,title:`Übersicht 日本語`},title:`Übersicht 日本語`,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`an absent icon stays NULL — unlike a view-stack icon name, which resolves to the empty string`,derivedFrom:"PAGE_PROP_ICON is a GIcon, and update_icons branches on `gicon != NULL` (adw-tab.c:194)",spec:{id:`a`,icon:null,indicatorIcon:null},title:``,tooltip:``,icon:null,indicatorIcon:null,loading:!1,needsAttention:!1},{rule:`every declared field survives`,derivedFrom:`adw_tab_page_set_{title,tooltip,icon,indicator_icon,loading,needs_attention} (adw-tab-view.c:3016-3352)`,spec:{id:`a`,title:`main.c`,tooltip:`<b>build failed</b>`,icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!0,needsAttention:!0},title:`main.c`,tooltip:`<b>build failed</b>`,icon:`text-x-generic`,indicatorIcon:`media-record`,loading:!0,needsAttention:!0}],l=[{title:`Inbox`,tooltip:``,keyword:`https://example.org/inbox`,terms:``,matches:!0,rule:`an EMPTY term set matches everything — gtk_string_filter_has_search short-circuits before any property is read`},{title:`Inbox`,tooltip:``,keyword:``,terms:`in`,matches:!0,rule:`the default SUBSTRING match, and the empty keyword does not become a wildcard`},{title:`Inbox`,tooltip:``,keyword:``,terms:`INB`,matches:!0,rule:`case folding is on, so the needle is folded too`},{title:`Inbox`,tooltip:``,keyword:``,terms:`box`,matches:!0,rule:`a SUBSTRING match is not a prefix match — "Inbox" ends with the needle`},{title:`Inbox`,tooltip:``,keyword:`https://example.org/inbox`,terms:`example.org`,matches:!0,rule:`the keyword is searched beside the title and the tooltip — the documented "page URLs" case`},{title:`Inbox`,tooltip:``,keyword:``,terms:`example.org`,matches:!1,rule:`a page whose title, tooltip and keyword are all empty or miss the needle is HIDDEN`},{title:``,tooltip:``,keyword:`Rechnungen`,terms:`rechnungen`,matches:!0,rule:`non-ASCII folds on both sides, so an umlaut-bearing keyword still matches`},{title:`Notes`,tooltip:`scratch pad`,keyword:``,terms:`scratch`,matches:!0,rule:`the tooltip is the third property, not a fallback for the title`}];export{i as TABS_REVEALED_VECTORS,a as TAB_CLOSE_VISIBLE_VECTORS,r as TAB_DESCENDANT_VECTORS,s as TAB_ICON_STATE_VECTORS,c as TAB_PAGE_DESCRIPTOR_VECTORS,l as TAB_SEARCH_VECTORS,n as TAB_SUCCESSOR_VECTORS,o as TAB_TOOLTIP_VECTORS,t as TAB_VIEW_VECTORS,applyTabViewOp,seedTabViewPages,tabViewClosing,tabViewOrder};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=[{rule:`an expander with no list row draws nothing and announces no level above the first`,row:null,options:{},indents:0,expander:`none`,level:1},{rule:`a collapsed root row is one arrow and no indent`,row:{depth:0,expandable:!0,expanded:!1},options:{},indents:0,expander:`collapsed`,level:1},{rule:`an expanded row at depth 2 is two indents and a turned arrow`,row:{depth:2,expandable:!0,expanded:!0},options:{},indents:2,expander:`expanded`,level:3},{rule:`a leaf takes one more indent in place of the arrow`,row:{depth:1,expandable:!1,expanded:!1},options:{},indents:2,expander:`none`,level:3},{rule:`indent-for-icon off leaves the leaf un-indented and one level lower`,row:{depth:1,expandable:!1,expanded:!1},options:{indentForIcon:!1},indents:1,expander:`none`,level:2},{rule:`a hidden expander takes the leaf branch, expandable or not`,row:{depth:1,expandable:!0,expanded:!0},options:{hideExpander:!0},indents:2,expander:`none`,level:3},{rule:`indent-for-depth off stops the indent growing but keeps the arrow`,row:{depth:3,expandable:!0,expanded:!0},options:{indentForDepth:!1},indents:0,expander:`expanded`,level:1},{rule:`both indents off on a leaf draw no ornament whatsoever`,row:{depth:2,expandable:!1,expanded:!1},options:{indentForDepth:!1,indentForIcon:!1},indents:0,expander:`none`,level:1}],t=[{rule:`plus expands`,key:`+`,state:{},action:`expand`},{rule:`asterisk expands`,key:`*`,state:{},action:`expand`},{rule:`minus collapses`,key:`-`,state:{},action:`collapse`},{rule:`slash collapses`,key:`/`,state:{},action:`collapse`},{rule:`Ctrl+Space toggles`,key:` `,state:{ctrlKey:!0},action:`toggle`},{rule:`a bare Space is the list view s, not the expander s`,key:` `,state:{},action:`none`},{rule:`a bare arrow moves the cursor and does not expand`,key:`ArrowRight`,state:{},action:`none`},{rule:`Shift+Right expands in a left-to-right locale`,key:`ArrowRight`,state:{shiftKey:!0},action:`expand`},{rule:`Shift+Left collapses in a left-to-right locale`,key:`ArrowLeft`,state:{shiftKey:!0},action:`collapse`},{rule:`the two arrows swap in a right-to-left locale`,key:`ArrowRight`,state:{shiftKey:!0,rtl:!0},action:`collapse`},{rule:`and so does the other one`,key:`ArrowLeft`,state:{shiftKey:!0,rtl:!0},action:`expand`},{rule:`an unrelated key asks for nothing, modifiers or not`,key:`a`,state:{shiftKey:!0,ctrlKey:!0},action:`none`}];export{e as TREE_EXPANDER_LAYOUT_VECTORS,t as TREE_EXPANDER_SHORTCUT_VECTORS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../_virtual/_rolldown/runtime.js";const e=[{label:`_Files`,stripped:`Files`,rule:`a single accel marker is removed`},{label:`Fi__les`,stripped:`Fi_les`,rule:`a DOUBLED marker collapses to one literal underscore`},{label:`R&D`,stripped:`R&D`,rule:`escape → parse is entity-neutral, so an ampersand survives`},{label:`Ü_bersicht`,stripped:`Übersicht`,rule:`non-ASCII is untouched; only the marker goes`},{label:``,stripped:``,rule:`empty in, empty out`},{label:`a_b_c`,stripped:`abc`,rule:`every lone marker is removed, not just the first`},{label:`Files_`,stripped:`Files`,rule:`a trailing lone marker marks nothing and is dropped`},{label:`__`,stripped:`_`,rule:`a doubled marker with nothing after it is still one underscore`},{label:`No mnemonic`,stripped:`No mnemonic`,rule:`a title without markers is copied verbatim`}],t=[{iconName:null,resolved:`image-missing`,rule:`REGRESSION PIN — a NULL icon name falls back, it does not vanish`},{iconName:``,resolved:`image-missing`,rule:"REGRESSION PIN — `icon_name && *icon_name` fails on '' too"},{iconName:void 0,resolved:`image-missing`,rule:`an absent property reads as NULL`},{iconName:`go-home-symbolic`,resolved:`go-home-symbolic`,rule:`a real name passes through, suffix included`},{iconName:`image-missing`,resolved:`image-missing`,rule:`the fallback name is itself a valid name`}],n=[{visible:!0,title:`Home`,iconName:null,buttonVisible:!0,rule:`a title alone is enough`},{visible:!0,title:null,iconName:`go-home-symbolic`,buttonVisible:!0,rule:`an icon alone is enough`},{visible:!0,title:null,iconName:null,buttonVisible:!1,rule:`REGRESSION PIN — both NULL hides the button entirely; both ports rendered an empty clickable box`},{visible:!0,title:``,iconName:null,buttonVisible:!0,rule:"REGRESSION PIN — the test is `title != NULL`, and '' is NOT NULL, so an empty-title page keeps its button"},{visible:!0,title:null,iconName:``,buttonVisible:!0,rule:`an EMPTY icon name is not NULL either — the button stays, showing the image-missing fallback`},{visible:!1,title:`Home`,iconName:`go-home-symbolic`,buttonVisible:!1,rule:`page visibility gates everything else`},{visible:!1,title:null,iconName:null,buttonVisible:!1,rule:`hidden and empty is still hidden`}],r=[{badgeNumber:0,needsAttention:!1,badgeLabel:``,description:``,rule:`no badge, no attention, no text`},{badgeNumber:0,needsAttention:!0,badgeLabel:``,description:`Attention requested.`,rule:`the dot has no label but does have a description`},{badgeNumber:1,needsAttention:!1,badgeLabel:`1`,description:`Has a badge: 1.`,rule:`the smallest badge`},{badgeNumber:7,needsAttention:!1,badgeLabel:`7`,description:`Has a badge: 7.`,rule:`a plain count`},{badgeNumber:7,needsAttention:!0,badgeLabel:`7`,description:`Has a badge: 7. Attention requested.`,rule:`both clauses — the BADGE one comes first`},{badgeNumber:999,needsAttention:!1,badgeLabel:`999`,description:`Has a badge: 999.`,rule:`999 is not > 999, so it still prints`},{badgeNumber:1e3,needsAttention:!1,badgeLabel:`999+`,description:`Has a badge: more than 999.`,rule:`above the limit the count collapses`},{badgeNumber:1e3,needsAttention:!0,badgeLabel:`999+`,description:`Has a badge: more than 999. Attention requested.`,rule:`the overflow clause composes the same way`}],i=[{reveal:!0,pages:[{visible:!0},{visible:!0}],revealed:!0,rule:`two visible pages reveal it`},{reveal:!0,pages:[{visible:!0}],revealed:!1,rule:"REGRESSION PIN — `count > 1`, so a single page never reveals the bar"},{reveal:!0,pages:[],revealed:!1,rule:`an empty stack keeps the count at 0`},{reveal:!1,pages:[{visible:!0},{visible:!0},{visible:!0}],revealed:!1,rule:"with `reveal` FALSE the count loop never runs"},{reveal:!0,pages:[{visible:!0},{visible:!1},{visible:!1}],revealed:!1,rule:`only pages with visible==TRUE count, so 1 of 3 stays collapsed`},{reveal:!0,pages:[{visible:!1},{visible:!1},{visible:!0},{visible:!0}],revealed:!0,rule:`2 visible out of 4 is enough, wherever they sit`}],a=[{rule:`REGRESSION PIN — a fresh bar is NOT revealed (the NativeScript port started life visible)`,derivedFrom:`PROP_REVEAL defaults to FALSE, adw-view-switcher-bar.c:256-259 + the init call at :277`,steps:[],stepResults:[],states:[],changes:[]},{rule:"reveal + two visible pages shows the bar; dropping to one page hides it again while `reveal` stays true",derivedFrom:`update_bar_revealed re-run from set_reveal (:383) and from items-changed (:340-343)`,steps:[{kind:`pages`,pages:[{visible:!0},{visible:!0}]},{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0}]}],stepResults:[!1,!0,!0],states:[{reveal:!1,revealed:!1},{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}],changes:[{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}]},{rule:`REGRESSION PIN — revealing a one-page stack does nothing until a second page appears`,derivedFrom:"update_bar_revealed, adw-view-switcher-bar.c:125 `gtk_action_bar_set_revealed (…, count > 1)`",steps:[{kind:`pages`,pages:[{visible:!0}]},{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0},{visible:!0}]}],stepResults:[!1,!0,!0],states:[{reveal:!1,revealed:!1},{reveal:!0,revealed:!1},{reveal:!0,revealed:!0}],changes:[{reveal:!0,revealed:!0}]},{rule:"setting `reveal` to the value it already has is a silent no-op",derivedFrom:`adw_view_switcher_bar_set_reveal, adw-view-switcher-bar.c:379-380`,steps:[{kind:`pages`,pages:[{visible:!0},{visible:!0}]},{kind:`reveal`,value:!1}],stepResults:[!1,!1],states:[{reveal:!1,revealed:!1},{reveal:!1,revealed:!1}],changes:[]},{rule:"hiding pages under a revealed bar collapses it without touching `reveal`",derivedFrom:`update_bar_revealed counts adw_view_stack_page_get_visible only, :116-120`,steps:[{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0},{visible:!0},{visible:!0}]},{kind:`pages`,pages:[{visible:!0},{visible:!1},{visible:!1}]}],stepResults:[!0,!0,!0],states:[{reveal:!0,revealed:!1},{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}],changes:[{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}]}],o=[{title:`_Files`,useUnderline:!0,displayMode:`labels`,tooltip:``,rule:`labels mode clears the tooltip`},{title:`_Files`,useUnderline:!0,displayMode:`both`,tooltip:``,rule:`both mode clears it too`},{title:`_Files`,useUnderline:!0,displayMode:`icons`,tooltip:`Files`,rule:`REGRESSION PIN — icons mode strips the mnemonic instead of showing the underscore`},{title:`_Files`,useUnderline:!1,displayMode:`icons`,tooltip:`_Files`,rule:`without use-underline the title is copied verbatim, underscore included`},{title:`R&D`,useUnderline:!1,displayMode:`icons`,tooltip:`R&D`,rule:`C stores the markup-escaped form because GTK tooltips are markup; the renderer-neutral value is plain text`},{title:null,useUnderline:!1,displayMode:`icons`,tooltip:``,rule:`a NULL title has no tooltip`},{title:``,useUnderline:!1,displayMode:`icons`,tooltip:``,rule:`an empty title has no tooltip either`}],s=[{rule:`REGRESSION PIN — a page with neither title nor icon keeps its slot but its button is HIDDEN, and a page with only an icon still gets one`,derivedFrom:`update_button, adw-view-switcher.c:178 + the icon fallback at adw-view-switcher-button.c:399-405`,pages:[{name:`a`,title:`Home`},{name:`b`},{name:`c`,iconName:`go-home-symbolic`}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`Home`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:``,iconName:`image-missing`,visible:!1,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:2,name:`c`,label:``,iconName:`go-home-symbolic`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`REGRESSION PIN — an EMPTY title keeps its button, and the wide policy lays every button out horizontally`,derivedFrom:"adw-view-switcher.c:178 (`title != NULL`) + the orientation ternary at :219-220, :534-537",pages:[{name:`a`,title:``},{name:`b`,title:`B`}],selected:1,policy:`wide`,buttons:[{pageIndex:0,name:`a`,label:``,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`B`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`horizontal`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`a hidden page hides its button no matter what it carries`,derivedFrom:"adw-view-switcher.c:178 — the `visible &&` clause short-circuits",pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,iconName:`go-next-symbolic`,visible:!1}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`B`,iconName:`go-next-symbolic`,visible:!1,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`badges and needs-attention reach the button, with the description AdwIndicatorBin derives`,derivedFrom:`update_button binds both onto the button (adw-view-switcher.c:161-176) → adw-indicator-bin.c:58-113`,pages:[{name:`a`,title:`Inbox`,badgeNumber:7},{name:`b`,title:`Spam`,badgeNumber:1e3,needsAttention:!0},{name:`c`,title:`Sent`,needsAttention:!0}],selected:0,policy:`wide`,buttons:[{pageIndex:0,name:`a`,label:`Inbox`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`horizontal`,badgeLabel:`7`,needsAttention:!1,description:`Has a badge: 7.`},{pageIndex:1,name:`b`,label:`Spam`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:`999+`,needsAttention:!0,description:`Has a badge: more than 999. Attention requested.`},{pageIndex:2,name:`c`,label:`Sent`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:``,needsAttention:!0,description:`Attention requested.`}]},{rule:`REGRESSION PIN — use-underline decides whether the accel marker is part of the painted label`,derivedFrom:`update_button binds title + use-underline onto the button, whose template label carries use-underline (adw-view-switcher-button.ui)`,pages:[{name:`a`,title:`_Files`,useUnderline:!0},{name:`b`,title:`_Files`}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`Files`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`_Files`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`with nothing selected no button is marked selected — -1 is a real state, not "page 0"`,derivedFrom:`add_child reads gtk_selection_model_is_selected per page (adw-view-switcher.c:209-217)`,pages:[{name:`a`,title:`A`}],selected:-1,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]}],c=[{rule:`REGRESSION PIN — a hidden page produces NO toggle, so toggleIndex and pageIndex diverge`,derivedFrom:`populate_group + add_toggle, adw-inline-view-switcher.c:370-378, :346`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1},{name:`c`,title:`C`},{name:`d`,title:`D`}],displayMode:`labels`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:2,name:`c`,label:`C`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:2,pageIndex:3,name:`d`,label:`D`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,-1,1,2],pageIndexByToggle:[0,2,3]},{rule:`icons mode builds no label and DOES set a mnemonic-stripped tooltip`,derivedFrom:`update_toggle ICONS branch (adw-inline-view-switcher.c:270-288) + update_tooltip (:163-192)`,pages:[{name:`a`,title:`_Files`,useUnderline:!0,iconName:`folder-symbolic`},{name:`b`,title:`R&D`}],displayMode:`icons`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`Files`,iconName:`folder-symbolic`,showIcon:!0,showLabel:!1,tooltip:`Files`,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:1,name:`b`,label:`R&D`,iconName:`image-missing`,showIcon:!0,showLabel:!1,tooltip:`R&D`,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,1],pageIndexByToggle:[0,1]},{rule:`both mode builds icon AND label, and clears the tooltip`,derivedFrom:`update_toggle BOTH branch, adw-inline-view-switcher.c:289-319 (adw_toggle_set_tooltip "" at :310)`,pages:[{name:`a`,title:`A`,iconName:`go-home-symbolic`,badgeNumber:3,needsAttention:!0}],displayMode:`both`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`A`,iconName:`go-home-symbolic`,showIcon:!0,showLabel:!0,tooltip:``,badgeLabel:`3`,needsAttention:!0,description:`Has a badge: 3. Attention requested.`}],toggleIndexByPage:[0],pageIndexByToggle:[0]},{rule:`with every page hidden there are no toggles at all and nothing maps`,derivedFrom:`populate_group leaves the group empty and calls set_active(GTK_INVALID_LIST_POSITION), :370-390`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`,visible:!1}],displayMode:`labels`,toggles:[],toggleIndexByPage:[-1,-1],pageIndexByToggle:[]},{rule:`the title-or-icon rule does NOT apply here — a page with neither still gets a toggle`,derivedFrom:`populate_group gates on adw_view_stack_page_get_visible alone (:374); the title/icon predicate lives only in AdwViewSwitcher.update_button`,pages:[{name:`a`},{name:`b`,title:`B`}],displayMode:`labels`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:``,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:1,name:`b`,label:`B`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,1],pageIndexByToggle:[0,1]}],l=[{rule:`the first page is selected automatically, and that auto-pick NOTIFIES`,derivedFrom:`add_page, adw-view-stack.c:1149-1151 → the notify at :1038-1039`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[],opResults:[],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`activating another tab selects its page and reports the activation as interactive`,derivedFrom:`on_button_toggled → gtk_selection_model_select_item, adw-view-switcher.c:134-139`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:2}],opResults:[!0],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2,selectedName:`c`,selectedTitle:`C`},{rule:`activating the ALREADY-active tab is a net no-op`,derivedFrom:`on_button_toggled, adw-view-switcher.c:140-146 — deactivating the active toggle re-reads the model and restores the button`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:0}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`REGRESSION PIN — an index past the end is REFUSED, not clamped to the last page (the browser switcher clamped)`,derivedFrom:`adw_view_stack_pages_select_item, adw-view-stack.c:682-684 — returns FALSE, no clamp anywhere`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:5}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`REGRESSION PIN — a negative index is REFUSED, not clamped to the first page (the browser switcher clamped)`,derivedFrom:`positions are guint, so -1 wraps to G_MAXUINT and fails the bound check at adw-view-stack.c:682`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1},{kind:`selectIndex`,index:-1}],opResults:[!0,!1],changes:[{selected:1,name:`b`,title:`B`,interactive:!0}],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`REGRESSION PIN — a fractional index is refused; both ports stored it and then matched no page, blanking the widget`,derivedFrom:`adw_view_stack_pages_select_item takes a guint position, adw-view-stack.c:675-683`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1.5},{kind:`selectIndex`,index:NaN}],opResults:[!1,!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`selecting by name works and an unknown name changes nothing`,derivedFrom:`adw_view_stack_set_visible_child_name, adw-view-stack.c:2404-2415 (g_warning at :2410)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectName`,name:`c`},{kind:`selectName`,name:`missing`}],opResults:[!0,!1],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2,selectedName:`c`,selectedTitle:`C`,diagnostics:[`Child name 'missing' not found in AdwViewStack`]},{rule:`the first VISIBLE page is auto-selected, not the first declared`,derivedFrom:`add_page's visibility gate, adw-view-stack.c:1149-1151`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`}],setupChanges:[{selected:1,name:`b`,title:`B`,interactive:!1}],ops:[],opResults:[],changes:[],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`hiding the selected page falls back to the first still-visible one, as an auto-pick`,derivedFrom:`update_child_visible → set_visible_child(NULL) scan, adw-view-stack.c:1071-1072, :961-974`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`setPageVisible`,name:`a`,visible:!1}],opResults:[!0],changes:[{selected:1,name:`b`,title:`B`,interactive:!1}],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`a hidden page cannot be selected — the switcher may still show its (hidden) slot, but the selection refuses`,derivedFrom:`adw_view_stack_set_visible_child_name, adw-view-stack.c:2415`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`with every page hidden nothing is selected and nothing is emitted`,derivedFrom:`the set_visible_child NULL scan finds nothing, adw-view-stack.c:961-977`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`,visible:!1}],setupChanges:[],ops:[],opResults:[],changes:[],selected:-1,selectedName:``,selectedTitle:``},{rule:`the reported title is the PAINTED label, so a mnemonic title reports its stripped form`,derivedFrom:`the button label carries use-underline (adw-view-switcher-button.ui) → adw_strip_mnemonic semantics`,pages:[{name:`a`,title:`_Files`,useUnderline:!0},{name:`b`,title:`B`}],setupChanges:[{selected:0,name:`a`,title:`Files`,interactive:!1}],ops:[],opResults:[],changes:[],selected:0,selectedName:`a`,selectedTitle:`Files`}],u=[{rule:`the selection follows the PAGE across an insert before it, so its index shifts`,derivedFrom:`adw_view_stack_pages_is_selected compares page identity, adw-view-stack.c:660-672`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`x`,title:`X`},{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],changes:[{selected:2,name:`b`,title:`B`,interactive:!1}],selected:2,selectedName:`b`},{rule:`a rebuild that DROPS the selected page falls back to the first visible one`,derivedFrom:`items_changed_cb → clear + populate (adw-view-switcher.c:258-263) over the auto-pick at adw-view-stack.c:1149-1151`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`c`,title:`C`}],changes:[{selected:0,name:`a`,title:`A`,interactive:!1}],selected:0,selectedName:`a`},{rule:`a rebuild that leaves the selected page where it was emits nothing`,derivedFrom:`set_visible_child idempotence guard, adw-view-stack.c:976-977`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],changes:[],selected:1,selectedName:`b`},{rule:`a page that survives the rebuild but is now HIDDEN loses the selection to the auto-pick`,derivedFrom:`the restore goes through select_item, which refuses a hidden page (adw-view-stack.c:2415)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],changes:[{selected:0,name:`a`,title:`A`,interactive:!1}],selected:0,selectedName:`a`},{rule:`rebuilding to an empty list selects nothing and says so`,derivedFrom:`select_item bound check with children->len == 0, adw-view-stack.c:682-683`,pages:[{name:`a`,title:`A`}],nextPages:[],changes:[{selected:-1,name:``,title:``,interactive:!1}],selected:-1,selectedName:``}],d=[{rule:`499 ms of dwell is not enough`,derivedFrom:`TIMEOUT_EXPAND 500 with g_timeout_add_once, adw-view-switcher-button.c:14, :85-89`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`advance`,ms:499}],changes:[],selected:0},{rule:`500 ms of dwell switches to the hovered page, exactly as a click would`,derivedFrom:`switch_timeout_cb, adw-view-switcher-button.c:58-63; the inline twin at adw-inline-view-switcher.c:194-204`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`advance`,ms:500}],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2},{rule:`hovering the ALREADY-active tab arms nothing at all`,derivedFrom:`drag_enter_cb early-returns on an active button, adw-view-switcher-button.c:82-83 (:219 inline)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:0},{kind:`advance`,ms:1e3}],changes:[],selected:0},{rule:`leaving before the dwell elapses cancels the pending switch`,derivedFrom:`drag_leave_cb removes the source, adw-view-switcher-button.c:93-96; adw-inline-view-switcher.c:228-236`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`leave`,index:2},{kind:`advance`,ms:1e3}],changes:[],selected:0},{rule:`each button owns its OWN timer — leaving one does not disarm another`,derivedFrom:'the timer is stored per widget: `self->switch_timer` (adw-view-switcher-button.c:50) and the per-toggle "switch-timer" data (adw-inline-view-switcher.c:223-224)',pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:1},{kind:`enter`,index:2},{kind:`leave`,index:1},{kind:`advance`,ms:500}],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2},{rule:`a dwell over a HIDDEN page fires but selects nothing — the selection guard still applies`,derivedFrom:`switch_timeout_cb activates the toggle, whose select_item is refused for a hidden page (adw-view-stack.c:2415)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],initial:0,steps:[{kind:`enter`,index:1},{kind:`advance`,ms:500}],changes:[],selected:0}];function createViewSwitcherClock(){let e=0,t=1,n=new Map;return{schedule(r,i){let a=t++;return n.set(a,{at:e+i,callback:r}),a},cancel(e){typeof e==`number`&&n.delete(e)},advance(t){e+=t;let r=[...n.entries()].filter(([,t])=>t.at<=e).sort(([e,t],[n,r])=>t.at-r.at||e-n);for(let[e,t]of r)n.has(e)&&(n.delete(e),t.callback())},get pending(){return n.size}}}export{c as INLINE_TOGGLE_VECTORS,o as INLINE_TOOLTIP_VECTORS,r as VIEW_SWITCHER_BADGE_VECTORS,i as VIEW_SWITCHER_BAR_REVEAL_VECTORS,a as VIEW_SWITCHER_BAR_VECTORS,s as VIEW_SWITCHER_BUTTON_VECTORS,n as VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS,d as VIEW_SWITCHER_DRAG_VECTORS,t as VIEW_SWITCHER_ICON_VECTORS,e as VIEW_SWITCHER_MNEMONIC_VECTORS,u as VIEW_SWITCHER_REBUILD_VECTORS,l as VIEW_SWITCHER_SELECTION_VECTORS,createViewSwitcherClock};
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";const e=[{label:`_Files`,stripped:`Files`,rule:`a single accel marker is removed`},{label:`Fi__les`,stripped:`Fi_les`,rule:`a DOUBLED marker collapses to one literal underscore`},{label:`R&D`,stripped:`R&D`,rule:`escape → parse is entity-neutral, so an ampersand survives`},{label:`Ü_bersicht`,stripped:`Übersicht`,rule:`non-ASCII is untouched; only the marker goes`},{label:``,stripped:``,rule:`empty in, empty out`},{label:`a_b_c`,stripped:`abc`,rule:`every lone marker is removed, not just the first`},{label:`Files_`,stripped:`Files`,rule:`a trailing lone marker marks nothing and is dropped`},{label:`__`,stripped:`_`,rule:`a doubled marker with nothing after it is still one underscore`},{label:`No mnemonic`,stripped:`No mnemonic`,rule:`a title without markers is copied verbatim`}],t=[{iconName:null,resolved:`image-missing`,rule:`REGRESSION PIN — a NULL icon name falls back, it does not vanish`},{iconName:``,resolved:`image-missing`,rule:"REGRESSION PIN — `icon_name && *icon_name` fails on '' too"},{iconName:void 0,resolved:`image-missing`,rule:`an absent property reads as NULL`},{iconName:`go-home-symbolic`,resolved:`go-home-symbolic`,rule:`a real name passes through, suffix included`},{iconName:`image-missing`,resolved:`image-missing`,rule:`the fallback name is itself a valid name`}],n=[{visible:!0,title:`Home`,iconName:null,buttonVisible:!0,rule:`a title alone is enough`},{visible:!0,title:null,iconName:`go-home-symbolic`,buttonVisible:!0,rule:`an icon alone is enough`},{visible:!0,title:null,iconName:null,buttonVisible:!1,rule:`REGRESSION PIN — both NULL hides the button entirely; both ports rendered an empty clickable box`},{visible:!0,title:``,iconName:null,buttonVisible:!0,rule:"REGRESSION PIN — the test is `title != NULL`, and '' is NOT NULL, so an empty-title page keeps its button"},{visible:!0,title:null,iconName:``,buttonVisible:!0,rule:`an EMPTY icon name is not NULL either — the button stays, showing the image-missing fallback`},{visible:!1,title:`Home`,iconName:`go-home-symbolic`,buttonVisible:!1,rule:`page visibility gates everything else`},{visible:!1,title:null,iconName:null,buttonVisible:!1,rule:`hidden and empty is still hidden`}],r=[{badgeNumber:0,needsAttention:!1,badgeLabel:``,description:``,rule:`no badge, no attention, no text`},{badgeNumber:0,needsAttention:!0,badgeLabel:``,description:`Attention requested.`,rule:`the dot has no label but does have a description`},{badgeNumber:1,needsAttention:!1,badgeLabel:`1`,description:`Has a badge: 1.`,rule:`the smallest badge`},{badgeNumber:7,needsAttention:!1,badgeLabel:`7`,description:`Has a badge: 7.`,rule:`a plain count`},{badgeNumber:7,needsAttention:!0,badgeLabel:`7`,description:`Has a badge: 7. Attention requested.`,rule:`both clauses — the BADGE one comes first`},{badgeNumber:999,needsAttention:!1,badgeLabel:`999`,description:`Has a badge: 999.`,rule:`999 is not > 999, so it still prints`},{badgeNumber:1e3,needsAttention:!1,badgeLabel:`999+`,description:`Has a badge: more than 999.`,rule:`above the limit the count collapses`},{badgeNumber:1e3,needsAttention:!0,badgeLabel:`999+`,description:`Has a badge: more than 999. Attention requested.`,rule:`the overflow clause composes the same way`}],i=[{reveal:!0,pages:[{visible:!0},{visible:!0}],revealed:!0,rule:`two visible pages reveal it`},{reveal:!0,pages:[{visible:!0}],revealed:!1,rule:"REGRESSION PIN — `count > 1`, so a single page never reveals the bar"},{reveal:!0,pages:[],revealed:!1,rule:`an empty stack keeps the count at 0`},{reveal:!1,pages:[{visible:!0},{visible:!0},{visible:!0}],revealed:!1,rule:"with `reveal` FALSE the count loop never runs"},{reveal:!0,pages:[{visible:!0},{visible:!1},{visible:!1}],revealed:!1,rule:`only pages with visible==TRUE count, so 1 of 3 stays collapsed`},{reveal:!0,pages:[{visible:!1},{visible:!1},{visible:!0},{visible:!0}],revealed:!0,rule:`2 visible out of 4 is enough, wherever they sit`}],a=[{rule:`REGRESSION PIN — a fresh bar is NOT revealed (the NativeScript port started life visible)`,derivedFrom:`PROP_REVEAL defaults to FALSE, adw-view-switcher-bar.c:256-259 + the init call at :277`,steps:[],stepResults:[],states:[],changes:[]},{rule:"reveal + two visible pages shows the bar; dropping to one page hides it again while `reveal` stays true",derivedFrom:`update_bar_revealed re-run from set_reveal (:383) and from items-changed (:340-343)`,steps:[{kind:`pages`,pages:[{visible:!0},{visible:!0}]},{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0}]}],stepResults:[!1,!0,!0],states:[{reveal:!1,revealed:!1},{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}],changes:[{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}]},{rule:`REGRESSION PIN — revealing a one-page stack does nothing until a second page appears`,derivedFrom:"update_bar_revealed, adw-view-switcher-bar.c:125 `gtk_action_bar_set_revealed (…, count > 1)`",steps:[{kind:`pages`,pages:[{visible:!0}]},{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0},{visible:!0}]}],stepResults:[!1,!0,!0],states:[{reveal:!1,revealed:!1},{reveal:!0,revealed:!1},{reveal:!0,revealed:!0}],changes:[{reveal:!0,revealed:!0}]},{rule:"setting `reveal` to the value it already has is a silent no-op",derivedFrom:`adw_view_switcher_bar_set_reveal, adw-view-switcher-bar.c:379-380`,steps:[{kind:`pages`,pages:[{visible:!0},{visible:!0}]},{kind:`reveal`,value:!1}],stepResults:[!1,!1],states:[{reveal:!1,revealed:!1},{reveal:!1,revealed:!1}],changes:[]},{rule:"hiding pages under a revealed bar collapses it without touching `reveal`",derivedFrom:`update_bar_revealed counts adw_view_stack_page_get_visible only, :116-120`,steps:[{kind:`reveal`,value:!0},{kind:`pages`,pages:[{visible:!0},{visible:!0},{visible:!0}]},{kind:`pages`,pages:[{visible:!0},{visible:!1},{visible:!1}]}],stepResults:[!0,!0,!0],states:[{reveal:!0,revealed:!1},{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}],changes:[{reveal:!0,revealed:!0},{reveal:!0,revealed:!1}]}],o=[{title:`_Files`,useUnderline:!0,displayMode:`labels`,tooltip:``,rule:`labels mode clears the tooltip`},{title:`_Files`,useUnderline:!0,displayMode:`both`,tooltip:``,rule:`both mode clears it too`},{title:`_Files`,useUnderline:!0,displayMode:`icons`,tooltip:`Files`,rule:`REGRESSION PIN — icons mode strips the mnemonic instead of showing the underscore`},{title:`_Files`,useUnderline:!1,displayMode:`icons`,tooltip:`_Files`,rule:`without use-underline the title is copied verbatim, underscore included`},{title:`R&D`,useUnderline:!1,displayMode:`icons`,tooltip:`R&D`,rule:`C stores the markup-escaped form because GTK tooltips are markup; the renderer-neutral value is plain text`},{title:null,useUnderline:!1,displayMode:`icons`,tooltip:``,rule:`a NULL title has no tooltip`},{title:``,useUnderline:!1,displayMode:`icons`,tooltip:``,rule:`an empty title has no tooltip either`}],s=[{rule:`REGRESSION PIN — a page with neither title nor icon keeps its slot but its button is HIDDEN, and a page with only an icon still gets one`,derivedFrom:`update_button, adw-view-switcher.c:178 + the icon fallback at adw-view-switcher-button.c:399-405`,pages:[{name:`a`,title:`Home`},{name:`b`},{name:`c`,iconName:`go-home-symbolic`}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`Home`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:``,iconName:`image-missing`,visible:!1,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:2,name:`c`,label:``,iconName:`go-home-symbolic`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`REGRESSION PIN — an EMPTY title keeps its button, and the wide policy lays every button out horizontally`,derivedFrom:"adw-view-switcher.c:178 (`title != NULL`) + the orientation ternary at :219-220, :534-537",pages:[{name:`a`,title:``},{name:`b`,title:`B`}],selected:1,policy:`wide`,buttons:[{pageIndex:0,name:`a`,label:``,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`B`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`horizontal`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`a hidden page hides its button no matter what it carries`,derivedFrom:"adw-view-switcher.c:178 — the `visible &&` clause short-circuits",pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,iconName:`go-next-symbolic`,visible:!1}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`B`,iconName:`go-next-symbolic`,visible:!1,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`badges and needs-attention reach the button, with the description AdwIndicatorBin derives`,derivedFrom:`update_button binds both onto the button (adw-view-switcher.c:161-176) → adw-indicator-bin.c:58-113`,pages:[{name:`a`,title:`Inbox`,badgeNumber:7},{name:`b`,title:`Spam`,badgeNumber:1e3,needsAttention:!0},{name:`c`,title:`Sent`,needsAttention:!0}],selected:0,policy:`wide`,buttons:[{pageIndex:0,name:`a`,label:`Inbox`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`horizontal`,badgeLabel:`7`,needsAttention:!1,description:`Has a badge: 7.`},{pageIndex:1,name:`b`,label:`Spam`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:`999+`,needsAttention:!0,description:`Has a badge: more than 999. Attention requested.`},{pageIndex:2,name:`c`,label:`Sent`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`horizontal`,badgeLabel:``,needsAttention:!0,description:`Attention requested.`}]},{rule:`REGRESSION PIN — use-underline decides whether the accel marker is part of the painted label`,derivedFrom:`update_button binds title + use-underline onto the button, whose template label carries use-underline (adw-view-switcher-button.ui)`,pages:[{name:`a`,title:`_Files`,useUnderline:!0},{name:`b`,title:`_Files`}],selected:0,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`Files`,iconName:`image-missing`,visible:!0,selected:!0,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``},{pageIndex:1,name:`b`,label:`_Files`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]},{rule:`with nothing selected no button is marked selected — -1 is a real state, not "page 0"`,derivedFrom:`add_child reads gtk_selection_model_is_selected per page (adw-view-switcher.c:209-217)`,pages:[{name:`a`,title:`A`}],selected:-1,policy:`narrow`,buttons:[{pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,visible:!0,selected:!1,orientation:`vertical`,badgeLabel:``,needsAttention:!1,description:``}]}],c=[{rule:`REGRESSION PIN — a hidden page produces NO toggle, so toggleIndex and pageIndex diverge`,derivedFrom:`populate_group + add_toggle, adw-inline-view-switcher.c:370-378, :346`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1},{name:`c`,title:`C`},{name:`d`,title:`D`}],displayMode:`labels`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`A`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:2,name:`c`,label:`C`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:2,pageIndex:3,name:`d`,label:`D`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,-1,1,2],pageIndexByToggle:[0,2,3]},{rule:`icons mode builds no label and DOES set a mnemonic-stripped tooltip`,derivedFrom:`update_toggle ICONS branch (adw-inline-view-switcher.c:270-288) + update_tooltip (:163-192)`,pages:[{name:`a`,title:`_Files`,useUnderline:!0,iconName:`folder-symbolic`},{name:`b`,title:`R&D`}],displayMode:`icons`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`Files`,iconName:`folder-symbolic`,showIcon:!0,showLabel:!1,tooltip:`Files`,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:1,name:`b`,label:`R&D`,iconName:`image-missing`,showIcon:!0,showLabel:!1,tooltip:`R&D`,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,1],pageIndexByToggle:[0,1]},{rule:`both mode builds icon AND label, and clears the tooltip`,derivedFrom:`update_toggle BOTH branch, adw-inline-view-switcher.c:289-319 (adw_toggle_set_tooltip "" at :310)`,pages:[{name:`a`,title:`A`,iconName:`go-home-symbolic`,badgeNumber:3,needsAttention:!0}],displayMode:`both`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:`A`,iconName:`go-home-symbolic`,showIcon:!0,showLabel:!0,tooltip:``,badgeLabel:`3`,needsAttention:!0,description:`Has a badge: 3. Attention requested.`}],toggleIndexByPage:[0],pageIndexByToggle:[0]},{rule:`with every page hidden there are no toggles at all and nothing maps`,derivedFrom:`populate_group leaves the group empty and calls set_active(GTK_INVALID_LIST_POSITION), :370-390`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`,visible:!1}],displayMode:`labels`,toggles:[],toggleIndexByPage:[-1,-1],pageIndexByToggle:[]},{rule:`the title-or-icon rule does NOT apply here — a page with neither still gets a toggle`,derivedFrom:`populate_group gates on adw_view_stack_page_get_visible alone (:374); the title/icon predicate lives only in AdwViewSwitcher.update_button`,pages:[{name:`a`},{name:`b`,title:`B`}],displayMode:`labels`,toggles:[{toggleIndex:0,pageIndex:0,name:`a`,label:``,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``},{toggleIndex:1,pageIndex:1,name:`b`,label:`B`,iconName:`image-missing`,showIcon:!1,showLabel:!0,tooltip:``,badgeLabel:``,needsAttention:!1,description:``}],toggleIndexByPage:[0,1],pageIndexByToggle:[0,1]}],l=[{rule:`the first page is selected automatically, and that auto-pick NOTIFIES`,derivedFrom:`add_page, adw-view-stack.c:1149-1151 → the notify at :1038-1039`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[],opResults:[],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`activating another tab selects its page and reports the activation as interactive`,derivedFrom:`on_button_toggled → gtk_selection_model_select_item, adw-view-switcher.c:134-139`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:2}],opResults:[!0],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2,selectedName:`c`,selectedTitle:`C`},{rule:`activating the ALREADY-active tab is a net no-op`,derivedFrom:`on_button_toggled, adw-view-switcher.c:140-146 — deactivating the active toggle re-reads the model and restores the button`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:0}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`REGRESSION PIN — an index past the end is REFUSED, not clamped to the last page (the browser switcher clamped)`,derivedFrom:`adw_view_stack_pages_select_item, adw-view-stack.c:682-684 — returns FALSE, no clamp anywhere`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:5}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`REGRESSION PIN — a negative index is REFUSED, not clamped to the first page (the browser switcher clamped)`,derivedFrom:`positions are guint, so -1 wraps to G_MAXUINT and fails the bound check at adw-view-stack.c:682`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1},{kind:`selectIndex`,index:-1}],opResults:[!0,!1],changes:[{selected:1,name:`b`,title:`B`,interactive:!0}],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`REGRESSION PIN — a fractional index is refused; both ports stored it and then matched no page, blanking the widget`,derivedFrom:`adw_view_stack_pages_select_item takes a guint position, adw-view-stack.c:675-683`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1.5},{kind:`selectIndex`,index:NaN}],opResults:[!1,!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`selecting by name works and an unknown name changes nothing`,derivedFrom:`adw_view_stack_set_visible_child_name, adw-view-stack.c:2404-2415 (g_warning at :2410)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectName`,name:`c`},{kind:`selectName`,name:`missing`}],opResults:[!0,!1],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2,selectedName:`c`,selectedTitle:`C`,diagnostics:[`Child name 'missing' not found in AdwViewStack`]},{rule:`the first VISIBLE page is auto-selected, not the first declared`,derivedFrom:`add_page's visibility gate, adw-view-stack.c:1149-1151`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`}],setupChanges:[{selected:1,name:`b`,title:`B`,interactive:!1}],ops:[],opResults:[],changes:[],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`hiding the selected page falls back to the first still-visible one, as an auto-pick`,derivedFrom:`update_child_visible → set_visible_child(NULL) scan, adw-view-stack.c:1071-1072, :961-974`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`setPageVisible`,name:`a`,visible:!1}],opResults:[!0],changes:[{selected:1,name:`b`,title:`B`,interactive:!1}],selected:1,selectedName:`b`,selectedTitle:`B`},{rule:`a hidden page cannot be selected — the switcher may still show its (hidden) slot, but the selection refuses`,derivedFrom:`adw_view_stack_set_visible_child_name, adw-view-stack.c:2415`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],setupChanges:[{selected:0,name:`a`,title:`A`,interactive:!1}],ops:[{kind:`selectIndex`,index:1}],opResults:[!1],changes:[],selected:0,selectedName:`a`,selectedTitle:`A`},{rule:`with every page hidden nothing is selected and nothing is emitted`,derivedFrom:`the set_visible_child NULL scan finds nothing, adw-view-stack.c:961-977`,pages:[{name:`a`,title:`A`,visible:!1},{name:`b`,title:`B`,visible:!1}],setupChanges:[],ops:[],opResults:[],changes:[],selected:-1,selectedName:``,selectedTitle:``},{rule:`the reported title is the PAINTED label, so a mnemonic title reports its stripped form`,derivedFrom:`the button label carries use-underline (adw-view-switcher-button.ui) → adw_strip_mnemonic semantics`,pages:[{name:`a`,title:`_Files`,useUnderline:!0},{name:`b`,title:`B`}],setupChanges:[{selected:0,name:`a`,title:`Files`,interactive:!1}],ops:[],opResults:[],changes:[],selected:0,selectedName:`a`,selectedTitle:`Files`}],u=[{rule:`the selection follows the PAGE across an insert before it, so its index shifts`,derivedFrom:`adw_view_stack_pages_is_selected compares page identity, adw-view-stack.c:660-672`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`x`,title:`X`},{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],changes:[{selected:2,name:`b`,title:`B`,interactive:!1}],selected:2,selectedName:`b`},{rule:`a rebuild that DROPS the selected page falls back to the first visible one`,derivedFrom:`items_changed_cb → clear + populate (adw-view-switcher.c:258-263) over the auto-pick at adw-view-stack.c:1149-1151`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`c`,title:`C`}],changes:[{selected:0,name:`a`,title:`A`,interactive:!1}],selected:0,selectedName:`a`},{rule:`a rebuild that leaves the selected page where it was emits nothing`,derivedFrom:`set_visible_child idempotence guard, adw-view-stack.c:976-977`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],changes:[],selected:1,selectedName:`b`},{rule:`a page that survives the rebuild but is now HIDDEN loses the selection to the auto-pick`,derivedFrom:`the restore goes through select_item, which refuses a hidden page (adw-view-stack.c:2415)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`}],select:`b`,nextPages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],changes:[{selected:0,name:`a`,title:`A`,interactive:!1}],selected:0,selectedName:`a`},{rule:`rebuilding to an empty list selects nothing and says so`,derivedFrom:`select_item bound check with children->len == 0, adw-view-stack.c:682-683`,pages:[{name:`a`,title:`A`}],nextPages:[],changes:[{selected:-1,name:``,title:``,interactive:!1}],selected:-1,selectedName:``}],d=[{rule:`499 ms of dwell is not enough`,derivedFrom:`TIMEOUT_EXPAND 500 with g_timeout_add_once, adw-view-switcher-button.c:14, :85-89`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`advance`,ms:499}],changes:[],selected:0},{rule:`500 ms of dwell switches to the hovered page, exactly as a click would`,derivedFrom:`switch_timeout_cb, adw-view-switcher-button.c:58-63; the inline twin at adw-inline-view-switcher.c:194-204`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`advance`,ms:500}],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2},{rule:`hovering the ALREADY-active tab arms nothing at all`,derivedFrom:`drag_enter_cb early-returns on an active button, adw-view-switcher-button.c:82-83 (:219 inline)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:0},{kind:`advance`,ms:1e3}],changes:[],selected:0},{rule:`leaving before the dwell elapses cancels the pending switch`,derivedFrom:`drag_leave_cb removes the source, adw-view-switcher-button.c:93-96; adw-inline-view-switcher.c:228-236`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:2},{kind:`leave`,index:2},{kind:`advance`,ms:1e3}],changes:[],selected:0},{rule:`each button owns its OWN timer — leaving one does not disarm another`,derivedFrom:'the timer is stored per widget: `self->switch_timer` (adw-view-switcher-button.c:50) and the per-toggle "switch-timer" data (adw-inline-view-switcher.c:223-224)',pages:[{name:`a`,title:`A`},{name:`b`,title:`B`},{name:`c`,title:`C`}],initial:0,steps:[{kind:`enter`,index:1},{kind:`enter`,index:2},{kind:`leave`,index:1},{kind:`advance`,ms:500}],changes:[{selected:2,name:`c`,title:`C`,interactive:!0}],selected:2},{rule:`a dwell over a HIDDEN page fires but selects nothing — the selection guard still applies`,derivedFrom:`switch_timeout_cb activates the toggle, whose select_item is refused for a hidden page (adw-view-stack.c:2415)`,pages:[{name:`a`,title:`A`},{name:`b`,title:`B`,visible:!1}],initial:0,steps:[{kind:`enter`,index:1},{kind:`advance`,ms:500}],changes:[],selected:0}];function createViewSwitcherClock(){let e=0,t=1,n=new Map;return{schedule(r,i){let a=t++;return n.set(a,{at:e+i,callback:r}),a},cancel(e){typeof e==`number`&&n.delete(e)},advance(t){e+=t;let r=[...n.entries()].filter(([,t])=>t.at<=e).sort(([e,t],[n,r])=>t.at-r.at||e-n);for(let[e,t]of r)n.has(e)&&(n.delete(e),t.callback())},get pending(){return n.size}}}const f=[{pages:`inbox,drafts,sent`,starts:``,sections:`-`,groups:`inbox,drafts,sent`,rule:"no page starts a section and the FIRST one opens it anyway — C tests `!section` before `starts_section`"},{pages:`inbox,drafts,sent`,starts:`sent`,sections:`Mail,-`,groups:`inbox,drafts/sent`,rule:"a page that starts a section FLUSHES the one before it, and its own `section-title` names the new one"},{pages:`inbox,drafts,sent`,starts:`inbox,sent`,sections:`Mail,Archive`,groups:`inbox,drafts/sent`,rule:"consecutive `starts-section` pages each get their own section, however short"},{pages:`inbox,drafts,sent`,starts:`inbox,sent`,sections:`,Archive`,groups:`inbox,drafts/sent`,rule:`a section opened WITHOUT a title carries an empty heading, which AdwSidebar draws as a separator`},{pages:``,starts:``,sections:``,groups:``,rule:`an empty stack yields no section at all — C only appends the section it filled`}];export{c as INLINE_TOGGLE_VECTORS,o as INLINE_TOOLTIP_VECTORS,r as VIEW_SWITCHER_BADGE_VECTORS,i as VIEW_SWITCHER_BAR_REVEAL_VECTORS,a as VIEW_SWITCHER_BAR_VECTORS,s as VIEW_SWITCHER_BUTTON_VECTORS,n as VIEW_SWITCHER_BUTTON_VISIBILITY_VECTORS,d as VIEW_SWITCHER_DRAG_VECTORS,t as VIEW_SWITCHER_ICON_VECTORS,e as VIEW_SWITCHER_MNEMONIC_VECTORS,u as VIEW_SWITCHER_REBUILD_VECTORS,l as VIEW_SWITCHER_SELECTION_VECTORS,f as VIEW_SWITCHER_SIDEBAR_SECTION_VECTORS,createViewSwitcherClock};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";function gridColumns(e,t=1){if(e.length===0)return 0;let n=e[0],r=1;for(;r<e.length&&Math.abs(e[r]-n)<=t;)r++;return r}function gridNavigate(e,t,n,r){if(n<=0||t<0||t>=n)return null;let i=Math.max(1,Math.floor(r)),a;switch(e){case`ArrowLeft`:a=t-1;break;case`ArrowRight`:a=t+1;break;case`ArrowUp`:a=t-i;break;case`ArrowDown`:a=t+i;break;case`Home`:a=0;break;case`End`:a=n-1;break;default:return null}return a<0||a>=n||a===t?null:a}export{gridColumns,gridNavigate};
|