@@ -2060,7 +2060,7 @@ function sortedTemplatePatterns() {
20602060 const mode = normalizePatternSortMode ( state . settings . patternSort ) ;
20612061 return templatePatterns ( ) . slice ( ) . sort ( ( a , b ) => {
20622062 if ( mode === "pinned-desc" ) return Number ( b . pinned ) - Number ( a . pinned ) || compareDate ( a . updatedAt , b . updatedAt ) || compareText ( a . name , b . name ) ;
2063- if ( mode === "pinned-asc" ) return Number ( a . pinned ) - Number ( b . pinned ) || compareDate ( a . updatedAt , b . updatedAt ) || compareText ( a . name , b . name ) ;
2063+ if ( mode === "pinned-asc" ) return Number ( b . pinned ) - Number ( a . pinned ) || compareDate ( a . updatedAt , b . updatedAt , "asc" ) || compareText ( a . name , b . name ) ;
20642064 const pinOrder = Number ( b . pinned ) - Number ( a . pinned ) ;
20652065 if ( pinOrder ) return pinOrder ;
20662066 if ( mode === "updated-desc" ) return compareDate ( a . updatedAt , b . updatedAt ) || compareText ( a . name , b . name ) ;
@@ -2086,6 +2086,15 @@ function templatePatterns() {
20862086 return state . patterns . filter ( ( pattern ) => ! pattern . isProjectCopy ) ;
20872087}
20882088
2089+ function insertTemplatePattern ( pattern ) {
2090+ const pinnedIndexes = state . patterns
2091+ . map ( ( item , index ) => ( { item, index } ) )
2092+ . filter ( ( { item } ) => ! item . isProjectCopy && item . pinned )
2093+ . map ( ( { index } ) => index ) ;
2094+ const insertAt = pinnedIndexes . length ? Math . max ( ...pinnedIndexes ) + 1 : 0 ;
2095+ state . patterns . splice ( insertAt , 0 , pattern ) ;
2096+ }
2097+
20892098function selectedProjectsForAction ( ) {
20902099 const ids = selectedProjectIds . size ? selectedProjectIds : new Set ( [ actionProjectId ] . filter ( Boolean ) ) ;
20912100 return state . projects . filter ( ( project ) => ids . has ( project . id ) ) ;
@@ -2315,7 +2324,7 @@ function importPatternPackage(payload) {
23152324 normalized . importKey = importKey ;
23162325 delete normalized . isProjectCopy ;
23172326 delete normalized . sourcePatternId ;
2318- state . patterns . unshift ( normalized ) ;
2327+ insertTemplatePattern ( normalized ) ;
23192328 selectedPatternId = normalized . id ;
23202329 saveState ( ) ;
23212330 return normalized ;
@@ -4588,7 +4597,7 @@ els.newPatternBtn.addEventListener("click", () => {
45884597 parts : [ { id : crypto . randomUUID ( ) , name : "部分 1" , notes : "" , segments : [ { id : crypto . randomUUID ( ) , repeat : 1 , note : "" , items : [ ] } ] } ] ,
45894598 groups : [ ]
45904599 } ;
4591- state . patterns . unshift ( pattern ) ;
4600+ insertTemplatePattern ( pattern ) ;
45924601 selectedPatternId = pattern . id ;
45934602 switchView ( "patternEdit" ) ;
45944603} ) ;
@@ -4717,7 +4726,7 @@ els.convertTextPatternBtn.addEventListener("click", () => {
47174726 parts : result . parts ,
47184727 groups : [ ]
47194728 } ;
4720- state . patterns . unshift ( pattern ) ;
4729+ insertTemplatePattern ( pattern ) ;
47214730 selectedPatternId = pattern . id ;
47224731 if ( result . unparsed . length ) {
47234732 els . textPatternUnparsed . classList . remove ( "hidden" ) ;
0 commit comments