PageSourceSearch

https://kindredly.ai/js/content.typesCQ2lHcy0.js

js kindredly.ai collected 2026-09-24 14:29:35 UTC 55,466 bytes, 1 lines download raw bytes

1import{I}from"./constantsDsHwd9pV.js";const X="kindredly.mapEmbed.v1",ee={link:[{id:"link.url",kind:"url-present",label:"Link address",prompt:"Link address",placeholder:"https://"}],website:[{id:"website.url",kind:"url-present",label:"Site address",prompt:"Site address",placeholder:"https://"}],podcast:[{id:"podcast.feed",kind:"feed-present",label:"Episode feed",prompt:"Podcast feed or show page URL",placeholder:"https://…/feed.xml, or the show page",fallbackNote:"No feed found — it'll be saved as a link you can set up later.",repair:"probeFeed",requirePlayableAudioOnAttach:!0}],yt_video:[{id:"ytVideo.videoId",kind:"identifier-present",identifier:"videoId",label:"Video link",prompt:"YouTube video link",placeholder:"https://youtube.com/watch?v=…",fallbackNote:"Not a recognized YouTube video — it'll be saved as a plain link.",repair:"refreshMetadata"}],yt_channel:[{id:"ytChannel.channelId",kind:"identifier-present",identifier:"youtubeChannelId",label:"Channel link",prompt:"YouTube channel link",placeholder:"https://youtube.com/@…",fallbackNote:"Not a recognized YouTube channel — it'll be saved as a plain link.",repair:"resolveYouTubeChannel"}
1],map:[{id:"map.embed",kind:"schema-present",schemaId:X,label:"Map",prompt:"Map link or embed code",placeholder:"Paste a Google Maps / OpenStreetMap link, or a map embed code",fallbackNote:"Couldn't recognize a map — it'll be saved as a plain link.",multiline:!0,repair:"resolveMap"}]};function te(e){return e?ee[e]??[]:[]}function ie(e,i){if(!Array.isArray(e))return null;for(const n of e){const r=typeof(n==null?void 0:n.feedURL)=="string"?n.feedURL.trim():"";if(r&&!(i&&(n==null?void 0:n.mediaKind)!==i))return{feedURL:r,mediaKind:n==null?void 0:n.mediaKind}}return null}function ne(e,i){return ie(e,i)!==null}const oe=["book","podcast","music","song","film","video_series","video"];function ae(e){return typeof e=="string"&&oe.includes(e)}const re=/(^|[\s._-])(movie|film)([\s._-]|$)/,se=/(^|[\s._-])(show|series|tv|television|episode|season)([\s._-]|$)/,ce=/(^|[\s._-])(track|song)([\s._-]|$)/;function b(e,i){const n=(i||"").toLowerCase();return e==="video"||e==="film"||e==="video_series"?re.test(n)?"film":se.test(n)?"video_series":e:(e==="music"||e==="song")&&ce.test(n)?"song":e}const E=/(^|\.)(amazon\.(com|ca|de|fr|it|es|in|com\.au|com\.br|com\.mx|co\.jp|co\.uk)|amazonaws\.cn)$/i,de=/(^|\.)audible\.(com|ca|de|fr|it|in|com\.au|co\.jp|co\.uk|es)$/i;function le(e){return e.toLowerCase().replace(/^www\./,"")}function v(e){const i=e.toLowerCase();return{albums:"album",artists:"artist",movies:"movie",playlists:"playlist",podcasts:"podcast",shows:"show",tracks:"track"}[i]||i}function ue(e){return e.pathname.split("/").filter(Boolean).map(i=>{try{return decodeURIComponent(i)}catch{return i}})}function d(e){if(!e)return;const i=e.replace(/[-_]+/g," ").replace(/\b(audiobook|kindle|ebook|audio book|unabridged|edition)\b/gi," ").replace(/\s+/g," ").trim();return i.length>=2?i:void 0}function _(e,i){return e.find(n=>i.test(n))}function m(e,i){return`https://${e}${i}`}function pe(e){let i;try{i=new URL(e)}catch{return null}if(i.protocol!=="http:"&&i.protocol!=="https:")return null;const n=le(i.hostname),r=ue(i),c=i.pathname;if(de.test(n)){const t=_(r.slice().reverse(),/^[A-Z0-9]{10}$/i)||i.searchParams.get("asin")||void 0;if(!t)return null;const o=t.toUpperCase(),a=r.findIndex(s=>s.toUpperCase()===o);return{provider:"audible",resourceType:"AUDIBLE_BOOK",externalId:o,canonicalUrl:m(n,`/pd/${o}`),subType:"book",providerItemType:"audiobook",titleHint:d(r[a-1])}}if(n.startsWith("music.amazon.")){const t=r.findIndex(u=>/^(albums?|tracks?|podcasts?|playlists?|artists?)$/i.test(u)),o=i.searchParams.get("trackAsin")||void 0,a=o?"tracks":t>=0?r[t].toLowerCase():"item",s=o||(t>=0?r[t+1]:void 0);return s?{provider:"amazon_music",resourceType:"AMAZON_MUSIC",externalId:`${a}:${s}`,canonicalUrl:m(n,`/${a}/${encodeURIComponent(s)}`),subType:a.startsWith("podcast")?"podcast":b("music",v(a)),providerItemType:v(a)}:null}if(n==="primevideo.com"||n.endsWith(".primevideo.com")||E.test(n)){const o=r.join("/").match(/(?:detail|video\/detail)\/([A-Z0-9]{8,20})/i);if(o){const a=o[1].toUpperCase(),s=r.findIndex(u=>u.toUpperCase()===a);return{provider:"prime_video",resourceType:"STREAMING_VIDEO",externalId:a,canonicalUrl:`https://www.primevideo.com/detail/${a}`,subType:"video",providerItemType:"video",titleHint:d(r[s-1])}}}if(E.test(n)){const t=r.findIndex(w=>/^(dp|product)$/i.test(w)),o=(t>=0?r[t+1]:void 0)||i.searchParams.get("asin")||void 0;if(!o||!/^[A-Z0-9]{10}$/i.test(o))return null;const a=o.toUpperCase(),s=t>0?r[t-1]:void 0,u=/^\d{9}[\dX]$/.test(a)||/(^|[-_])(ebook|kindle|paperback|hardcover|audiobook)([-_]|$)/i.test(s||"");return{provider:"amazon_books",resourceType:"AMAZON_BOOK",externalId:a,canonicalUrl:m(n,`/dp/${a}`),subType:u?"book":void 0,providerItemType:u?"book":"product",titleHint:d(s)}}if(n==="share.libbyapp.com"||n.endsWith(".libbyapp.com")||n==="libbyapp.com"){const t=r.findIndex(a=>a==="title"),o=(t>=0?r[t+1]:void 0)||_(r.slice().reverse(),/^\d{3,}$/);return o?{provider:"libby",resourceType:"LIBRARY_BOOK",externalId:o,canonicalUrl:`https://share.libbyapp.com/title/${encodeURIComponent(o)}`,subType:"book",providerItemType:"library_title"}:null}if(n==="overdrive.com"||n.endsWith(".overdrive.com")){const t=r.findIndex(a=>a==="media"),o=t>=0?r[t+1]:void 0;return o?{provider:"overdrive",resourceType:"LIBRARY_BOOK",externalId:o,canonicalUrl:m(n,`/media/${encodeURIComponent(o)}`),subType:"book",providerItemType:"library_title"}:null}if(n==="play.google.com"&&r[0]==="store"&&r[1]==="books"&&i.searchParams.get("id")){const t=i.searchParams.get("id");
1return{provider:"google_play_books",resourceType:"GOOGLE_BOOK",externalId:t,canonicalUrl:`https://play.google.com/store/books/details?id=${encodeURIComponent(t)}`,subType:"book",providerItemType:"book",titleHint:d(r[3])}}if(n==="open.spotify.com"||n==="spotify.link"){if(n==="spotify.link"&&r[0])return{provider:"spotify",resourceType:"SPOTIFY_ITEM",externalId:`short:${r[0]}`,canonicalUrl:`https://spotify.link/${encodeURIComponent(r[0])}`,providerItemType:"short_link"};const t=/^intl-[a-z]{2}$/i.test(r[0]||"")?1:0,o=r[t],a=r[t+1];return!o||!a||!/^(track|album|artist|playlist|show|episode|audiobook)$/i.test(o)?null:{provider:"spotify",resourceType:"SPOTIFY_ITEM",externalId:`${o}:${a}`,canonicalUrl:`https://open.spotify.com/${o}/${encodeURIComponent(a)}`,subType:/^(show|episode)$/i.test(o)?"podcast":o==="audiobook"?"book":b("music",o),providerItemType:o}}const l=[{hosts:/(^|\.)netflix\.com$/i,provider:"netflix",match:t=>{const o=t.findIndex(a=>a==="title");return o>=0&&t[o+1]?{id:t[o+1],type:"title"}:null}},{hosts:/(^|\.)disneyplus\.com$/i,provider:"disney_plus",match:t=>{const o=t.findIndex(s=>/^(movies|series|video)$/i.test(s));return o<0||!t[o+1]?null:{id:t[o+2]||t[o+1],type:v(t[o]),titleHint:t[o+2]?d(t[o+1]):void 0}}},{hosts:/(^|\.)hulu\.com$/i,provider:"hulu",match:t=>{const o=t.findIndex(u=>/^(movie|series|watch)$/i.test(u)),a=o>=0?t[t.length-1]:void 0;if(!a)return null;const s=(a.match(/([0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})$/i)||[])[1]||a;return{id:s,type:t[o],titleHint:d(a.replace(s,""))}}},{hosts:/(^|\.)(max|hbomax)\.com$/i,provider:"max",match:t=>{const o=t.find(a=>/^urn:hbo:/i.test(a))||t[t.length-1];return o?{id:o,type:t.find(a=>/^(movie|show|episode)$/i.test(a))||"video"}:null}},{hosts:/^tv\.apple\.com$/i,provider:"apple_tv",match:t=>{const o=t.find(s=>/^umc\.cmc\./i.test(s)),a=o?t.indexOf(o):-1;return o?{id:o,type:t.find(s=>/^(movie|show|episode)$/i.test(s))||"video",titleHint:d(t[a-1])}:null}},{hosts:/(^|\.)paramountplus\.com$/i,provider:"paramount_plus",match:t=>{const o=t.findIndex(s=>/^(movies|shows|video)$/i.test(s)),a=t[o+2]||t[o+1];return o>=0&&a?{id:a,type:v(t[o]),titleHint:d(t[o+1])}:null}},{hosts:/(^|\.)peacocktv\.com$/i,provider:"peacock",match:t=>{const o=t.find(a=>/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(a))||t[t.length-1];return o?{id:o,type:"video"}:null}},{hosts:/(^|\.)tubitv\.com$/i,provider:"tubi",match:t=>{const o=t.findIndex(s=>/^(movies|series)\/?$/i.test(s)),a=o>=0?t[o+1]:void 0;return a?{id:a,type:v(t[o]),titleHint:d(t[o+2])}:null}},{hosts:/(^|\.)plex\.tv$/i,provider:"plex",match:t=>{const o=t.findIndex(s=>/^(movie|show|episode)$/i.test(s)),a=o>=0?t[o+1]:void 0;return a?{id:a,type:t[o],titleHint:d(a)}:null}},{hosts:/(^|\.)imdb\.com$/i,provider:"imdb",resourceType:"MOVIE_DATABASE_ITEM",match:(t,o)=>{const a=(o.match(/\/title\/(tt\d+)/i)||[])[1];return a?{id:a,type:"title"}:null}},{hosts:/(^|\.)themoviedb\.org$/i,provider:"tmdb",resourceType:"MOVIE_DATABASE_ITEM",match:t=>{var s;const o=t.findIndex(u=>/^(movie|tv)$/i.test(u)),a=o>=0?(s=(t[o+1]||"").match(/^\d+/))==null?void 0:s[0]:void 0;return a?{id:a,type:t[o],titleHint:d(t[o+1].replace(/^\d+-?/,""))}:null}},{hosts:/(^|\.)letterboxd\.com$/i,provider:"letterboxd",resourceType:"MOVIE_DATABASE_ITEM",match:t=>{const o=t.findIndex(s=>s==="film"),a=o>=0?t[o+1]:void 0;return a?{id:a,type:"movie",titleHint:d(a)}:null}},{hosts:/(^|\.)rottentomatoes\.com$/i,provider:"rotten_tomatoes",resourceType:"MOVIE_DATABASE_ITEM",match:t=>{const o=t.findIndex(s=>/^(m|tv)$/i.test(s)),a=o>=0?t[o+1]:void 0;return a?{id:a,type:t[o]==="m"?"movie":"show",titleHint:d(a)}:null}},{hosts:/(^|\.)(vudu|fandangoathome)\.com$/i,provider:"fandango_at_home",match:t=>{const o=_(t.slice().reverse(),/^\d+$/)||t[t.length-1];return o?{id:o,type:"video",titleHint:d(t[t.length-2])}:null}},{hosts:/(^|\.)crunchyroll\.com$/i,provider:"crunchyroll",match:t=>{const o=t.findIndex(s=>/^(watch|series)$/i.test(s)),a=o>=0?t[o+1]:void 0;return a?{id:a,type:t[o]==="series"?"series":"episode",titleHint:d(t[o+2])}:null}},{hosts:/(^|\.)mubi\.com$/i,provider:"mubi",match:t=>{const o=t.findIndex(s=>s==="films"),a=o>=0?t[o+1]:void 0;
1return a?{id:a,type:"movie",titleHint:d(a)}:null}},{hosts:/(^|\.)criterionchannel\.com$/i,provider:"criterion_channel",match:t=>{const o=t.findIndex(s=>s==="videos"),a=o>=0?t[o+1]:void 0;return a?{id:a,type:"movie",titleHint:d(a)}:null}},{hosts:/(^|\.)kanopy\.com$/i,provider:"kanopy",match:t=>{const o=t.findIndex(s=>s==="product"),a=o>=0?t[o+1]:void 0;return a?{id:a,type:"video"}:null}},{hosts:/(^|\.)therokuchannel\.roku\.com$/i,provider:"roku_channel",match:t=>{const o=t.findIndex(s=>s==="details"),a=o>=0?t[o+1]:void 0;return a?{id:a,type:"video",titleHint:d(t[o+2])}:null}},{hosts:/^play\.google\.com$/i,provider:"google_tv",match:t=>t[0]==="store"&&t[1]==="movies"&&i.searchParams.get("id")?{id:i.searchParams.get("id"),type:"movie",titleHint:d(t[3])}:null},{hosts:/(^|\.)moviesanywhere\.com$/i,provider:"movies_anywhere",match:t=>{const o=t.findIndex(s=>s==="movie"),a=o>=0?t[o+1]:void 0;return a?{id:a,type:"movie",titleHint:d(a)}:null}}];for(const t of l){if(!t.hosts.test(n))continue;const o=t.match(r,c);return o?{provider:t.provider,resourceType:t.resourceType||"STREAMING_VIDEO",externalId:o.id,canonicalUrl:m(n,c),subType:b("video",o.type),providerItemType:o.type||"video",titleHint:o.titleHint}:null}if(/^(books|music|podcasts)\.apple\.com$/i.test(n)){const t=r.findIndex(Q=>/^(id)?\d{5,}$/i.test(Q));if(t<0)return null;const o=r[t].replace(/^id/i,""),a=n.startsWith("books.")?"apple_books":n.startsWith("podcasts.")?"apple_podcasts":"apple_music",s=a==="apple_music"&&/^\d+$/.test(i.searchParams.get("i")||"")?i.searchParams.get("i"):void 0,u=(r[t-2]||"").toLowerCase(),w=s?"song":u||a.replace("apple_",""),J=a==="apple_books"?"book":a==="apple_podcasts"?"podcast":b("music",w);return{provider:a,resourceType:"APPLE_MEDIA",externalId:`${a}:${s||o}`,canonicalUrl:m(n,c)+(s?`?i=${s}`:""),subType:J,providerItemType:w,titleHint:d(r[t-1])}}if(n==="books.google.com"||n.startsWith("books.google.")){const t=i.searchParams.get("id")||(r[0]==="books"?i.searchParams.get("vid"):null);return t?{provider:"google_books",resourceType:"GOOGLE_BOOK",externalId:t,canonicalUrl:`https://books.google.com/books?id=${encodeURIComponent(t)}`,subType:"book",providerItemType:"book"}:null}const p=[{hosts:/(^|\.)kobo\.com$/i,provider:"kobo",id:t=>t[t.findIndex(o=>o==="ebook")+1],subType:"book",providerItemType:"book"},{hosts:/(^|\.)barnesandnoble\.com$/i,provider:"barnes_noble",id:t=>_(t.slice().reverse(),/^\d{10,13}$/),subType:"book",providerItemType:"book"},{hosts:/(^|\.)goodreads\.com$/i,provider:"goodreads",id:t=>(t.join("/").match(/book\/show\/(\d+)/)||[])[1],subType:"book",providerItemType:"book"},{hosts:/(^|\.)thestorygraph\.com$/i,provider:"storygraph",id:t=>(t.join("/").match(/books\/([^/]+)/)||[])[1],subType:"book",providerItemType:"book"},{hosts:/(^|\.)libro\.fm$/i,provider:"libro_fm",id:t=>(t.join("/").match(/audiobooks\/([^/]+)/)||[])[1],subType:"book",providerItemType:"audiobook"},{hosts:/(^|\.)audiobooks\.com$/i,provider:"audiobooks_com",id:t=>(t.join("/").match(/audiobook\/[^/]+\/(\d+)/)||[])[1],subType:"book",providerItemType:"audiobook"},{hosts:/(^|\.)(everand|scribd)\.com$/i,provider:"everand",id:t=>(t.join("/").match(/(?:book|audiobook)\/(\d+)/)||[])[1],subType:"book",providerItemType:"book"},{hosts:/(^|\.)hoopladigital\.com$/i,provider:"hoopla",id:t=>(t.join("/").match(/title\/(\d+)/)||[])[1],providerItemType:"library_title"},{hosts:/(^|\.)chirpbooks\.com$/i,provider:"chirp",id:t=>(t.join("/").match(/audiobooks\/([^/]+)/)||[])[1],subType:"book",providerItemType:"audiobook"},{hosts:/(^|\.)bookshop\.org$/i,provider:"bookshop_org",id:t=>_(t.slice().reverse(),/^97[89]\d{10}$/)||t[t.length-1],subType:"book",providerItemType:"book"}];for(const t of p){if(!t.hosts.test(n))continue;const o=t.id(r,i);if(!o)return null;const a=/^97[89]\d{10}$/.test(o)?o:void 0;return{provider:t.provider,resourceType:"BOOK_PROVIDER_ITEM",externalId:o,canonicalUrl:m(n,c),subType:t.subType,providerItemType:t.providerItemType,titleHint:d(r[r.indexOf(o)-1]),isbn:a}}const y=[{hosts:/(^|\.)soundcloud\.com$/i,provider:"soundcloud"},{hosts:/(^|\.)deezer\.com$/i,provider:"deezer"},{hosts:/(^|\.)tidal\.com$/i,provider:"tidal"},{hosts:/\.bandcamp\.com$/i,provider:"bandcamp"},{hosts:/(^|\.)pandora\.com$/i,provider:"pandora"},{hosts:/(^|\.)qobuz\.com$/i,provider:"qobuz"}];for(const t of y){if(!t.hosts.test(n)||r.length===0)continue;const o=r.find(u=>/^(track|album|artist|playlist)$/i.test(u))||"item",a=r.indexOf(o),s=a>=0?r[a+1]:r.slice(0,2).join("/");return s?{provider:t.provider,resourceType:"AUDIO_PROVIDER_ITEM",externalId:`${o}:${s}
1`,canonicalUrl:m(n,c),subType:b("music",o),providerItemType:o,titleHint:d(s)}:null}return null}const S=[{key:"col",name:"Collection",icon:"folder",primary:!0,hide:!1},{key:"defaultQuickbar",name:"Quickbar",icon:"lightning",parent:"col",hide:!0},{key:"defaultSharedCollection",name:"Shared Collection",icon:"people",parent:"col",hide:!0},{key:"defaultShowcaseCollection",name:"Showcase Collection",icon:"stars",parent:"col",hide:!0},{key:"link",name:"Link",icon:"link-45deg",primary:!0,hide:!1,featured:!0},{key:"note",name:"Note",icon:"sticky",primary:!0,hide:!1,featured:!0},{key:"file_group",name:"File(s)",icon:"files",primary:!0,hide:!1,featured:!0},{key:"default",name:"Default Type",icon:"file-richtext",primary:!0,hide:!0},{key:"tab",name:"Tab",icon:"columns-gap",primary:!0,hide:!0},{key:"thing",name:"Thing",icon:"box",primary:!0,hide:!0},{key:"animal",name:"Animal",icon:"feather",parent:"thing",hide:!0},{key:"art_work",name:"Art Work",icon:"brush",parent:"thing",hide:!0},{key:"article",name:"Article",icon:"file-earmark-text",parent:"thing",hide:!0},{key:"artist",name:"Artist",icon:"person-lines-fill",parent:"thing",hide:!0},{key:"book",name:"Book",icon:"book",parent:"thing",hide:!0,schema:[{name:"authors",type:"multi_string",label:"Author(s)",placeholder:"Add an author",uiGroup:"primary"},{name:"publisher",type:"string",label:"Publisher",placeholder:"Publisher (optional)",uiGroup:"details"},{name:"publishedDate",type:"date",label:"Published date",uiGroup:"primary"},{name:"isbn",type:"string",label:"ISBN",placeholder:"ISBN (optional)",uiGroup:"details"},{name:"language",type:"string",label:"Language",placeholder:"Language (optional)",uiGroup:"details"},{name:"edition",type:"string",label:"Edition",placeholder:"Edition (optional)",uiGroup:"details"},{name:"series",type:"string",label:"Series",placeholder:"Series (optional)",uiGroup:"details"},{name:"pageCount",type:"number",label:"Page count",placeholder:"Pages (optional)",uiGroup:"details"}]},{key:"ebook",name:"E-Book",icon:"book",parent:"thing",hide:!1,schema:[{name:"authors",type:"multi_string",label:"Author(s)",placeholder:"Add an author",uiGroup:"primary"},{name:"publisher",type:"string",label:"Publisher",placeholder:"Publisher (optional)",uiGroup:"details"},{name:"publishedDate",type:"date",label:"Published date",uiGroup:"primary"},{name:"isbn",type:"string",label:"ISBN",placeholder:"ISBN (optional)",uiGroup:"details"},{name:"language",type:"string",label:"Language",placeholder:"Language (optional)",uiGroup:"details"},{name:"edition",type:"string",label:"Edition",placeholder:"Edition (optional)",uiGroup:"details"},{name:"series",type:"string",label:"Series",placeholder:"Series (optional)",uiGroup:"details"},{name:"pageCount",type:"number",label:"Page count",placeholder:"Pages (optional)",uiGroup:"details"}]},{key:"content_creator",name:"Content Creator",icon:"person-lines-fill",parent:"thing",hide:!0},{key:"event",name:"Event",icon:"calendar4-week",parent:"thing",hide:!1,featured:!0},{key:"film",name:"Film",icon:"film",parent:"thing",hide:!0},{key:"food",name:"Food",icon:"cup",parent:"thing",hide:!0},{key:"game",name:"Game",icon:"controller",parent:"thing",hide:!0},{key:"generic",name:"Generic",icon:"file",parent:"thing",hide:!0},{key:"image",name:"Image",icon:"image",parent:"thing",hide:!0},{key:"information",name:"Info",icon:"info-circle",parent:"thing",hide:!1},{key:"location",name:"Location",icon:"geo",parent:"thing",hide:!0},{key:"memory",name:"Memory",icon:"journal-text",parent:"thing",hide:!0},{key:"music",name:"Music",icon:"music-note-beamed",parent:"thing",hide:!0},{key:"object",name:"Object",icon:"square-fill",parent:"thing",hide:!0},{key:"organization",name:"Organization",icon:"building",parent:"thing",hide:!0},{key:"other",name:"Other",icon:"circle-fill",parent:"thing",hide:!1},{key:"person",name:"Person",icon:"person-lines-fill",parent:"thing",hide:!0},{key:"plant",name:"Plant",icon:"tree",parent:"thing",hide:!0},{key:"product",name:"Product",icon:"cart",parent:"thing",hide:!0,schema:[{name:"price",type:"number",label:"Price",placeholder:"Price (optional)",uiGroup:"primary"},{name:"currency",type:"string",label:"Currency",placeholder:"USD",uiGroup:"primary"},{name:"priceSeenAt",type:"date",label:"Price seen",uiGroup:"primary"},{name:"productType",type:"string",label:"Kind of product",placeholder:"Headphones, tumbler, building set",uiGroup:"primary"},{name:"store",type:"string",label:"Store",placeholder:"Where it is sold",uiGroup:"details"},{name:"availability",type:"string",label:"Availability",uiGroup:"details"},{name:"identifier",type:"string",label:"Identifier",uiGroup:"hidden"},{name:"priceHistory",type:"array",label:"Price history",uiGroup:"hidden"}]},{key:"project",name:"Project",icon:"folder",parent:"thing",hide:!0},{key:"task",name:"Task",icon:"check2-square",parent:"thing",hide:!0},{key:"song",name:"Song",icon:"music-note-beamed",parent:"thing",hide:!0},{key:"story",name:"Story",icon:"file-richtext",parent:"thing",hide:!0},{key:"video_game",name:"Video Game",icon:"controller",parent:"thing",hide:!0},{key:"video_series",name:"Series (TV or Show)",icon:"tv",parent:"thing",hide:!0},{key:"video",name:"Video",icon:"file-play",parent:"thing",hide:!0},{key:"written_work",name:"Written Work",icon:"journal-text",parent:"thing",hide:!0},{key:"feed_collection",name:"Feed",icon:"rss",parent:"link",hide:!0},{key:"content_feed",name:"Content Feed",icon:"rss",parent:"link",hide:!1,featured:!0},{key:"pub_col_slink",name:"Published Collection Link",icon:"arrow-90deg-left",parent:"link",hide:!0},{key:"kin_app",name:"Kindredly App",icon:"play",parent:"thing",hide:!1,schema:[{name:"sourceKind",type:"select",label:"App source type",options:[{value:"item",text:"Library app"},{value:"published",text:"Published app"}],uiGroup:"details"},{name:"sourceId",type:"string",label:"App source ID",placeholder:"Item ID or publish ID",uiGroup:"details"},{name:"preferredOpenMode",type:"select",label:"Open in",options:[{value:"website",text:"Website"},{value:"embedded",text:"Kindredly"},{value:"either",text:"Either"}],uiGroup:"details"},{name:"launchPath",type:"string",label:"Launch path",placeholder:"Optional app path",uiGroup:"details"},{name:"appRole",type:"select",label:"App role",options:[{value:"firstParty",text:"First-party"},{value:"userHosted",text:"User hosted"}],uiGroup:"details"}]},{key:"app",name:"App",icon:"phone",parent:"link",hide:!0},{key:"website",name:"Website",icon:"globe",parent:"link",hide:!1,featured:!0},{key:"podcast",name:"Podcast",icon:"headphones",parent:"link",hide:!0,featured:!0},{key:"yt_channel",name:"YouTube Channel",icon:"youtube",parent:"link",hide:!0},{key:"yt_video",name:"YouTube Video",icon:"youtube",parent:"link",hide:!0},{key:"map",name:"Map",icon:"map",parent:"link",hide:!1,featured:!0},{key:"lesson",name:"Lesson",icon:"mortarboard",parent:"thing",hide:!1,featured:!0}],M=["col","website","yt_channel","podcast","kin_app","link"],me=["link","note","event","file_group","website","content_feed","podcast","map","lesson","kin_app","information","other"],he=new Set(me);function ye(e){return he.has(e)}const N=e=>{const i=S.find(n=>n.key===e);return i==null?void 0:i.parent};M.filter(e=>e!=="col"&&e!=="link"&&N(e)==="link");M.filter(e=>N(e)==="thing");const ge={col:{description:"A collection that groups related items together.",extraDetails:"Best for folders, bundles, reading lists, and saved sets."},link:{description:"A web resource you usually open by URL.",extraDetails:"Best for websites, online tools, channels, and destinations."},note:{description:"A text-first note stored and edited inside Kindredly.",extraDetails:"Best for writing, scratch notes, and journal-style content."},file_group:{description:"A file or attachment-based item.",extraDetails:"Best for uploads, PDFs, images, and grouped media files."},book:{description:"A book or long-form written work.",extraDetails:"Best for titles with authors, publishing details, and reading metadata."},ebook:{description:"A digital book or downloadable reading item.",extraDetails:"Best for EPUBs, PDFs, and other digital reading resources."},information:{description:"A general reference item with text details.",extraDetails:"Best for facts, summaries, research notes, and structured knowledge."},other:{description:"A catch-all item when a more specific type does not fit well.",extraDetails:"Use when you want to save the item now and refine its type later."},kin_app:{description:"A Kindredly app item with structured launch settings.",extraDetails:"Best for first-party or published app experiences that run inside Kindredly."},app:{description:"An online app or interactive web tool.",extraDetails:"Best for tools you use actively rather than mostly read or watch."},website:{description:"A standard website or web page.",extraDetails:"Best for pages you mainly visit in a browser.",keywords:"url web page site"},content_feed:{description:"A content feed you follow for new entries.",extraDetails:"Best for RSS/Atom feeds — news, poems, word of the day, picture of the day.",keywords:"rss atom feed news poem poetry word of the day picture of the day daily blog subscribe"},podcast:{description:"A podcast, audio show, or listening destination.",extraDetails:"Best for audio-first content and recurring episodes.",keywords:"audio rss feed episodes show listen"},yt_channel:{description:"A YouTube creator channel or subscription destination.",extraDetails:"Best for channel-level browsing and creator follow lists.",keywords:"youtube channel video creator"},yt_video:{description:"A specific YouTube video or single video destination.",extraDetails:"Best for one-off videos instead of an entire channel.",keywords:"youtube video clip"},map:{description:"An interactive map or location, embedded inline.",extraDetails:"Paste a Google Maps or OpenStreetMap link, or a map embed code.",keywords:"map maps location google openstreetmap osm trailforks mapbox embed directions trail route"},event:{description:"Something happening at a time, shown on the calendar.",extraDetails:"An appointment, a practice, a trip. It c
1an repeat, and it can be for the whole family.",keywords:"event appointment calendar schedule practice birthday trip meeting reminder when date"},lesson:{description:"A step-through lesson with quizzes and a score.",extraDetails:"Build it by hand or with AI. Best for vocabulary drills, study guides, and mini-courses.",keywords:"lesson course quiz flashcard teach tutor study vocabulary practice khan test questions"},article:{description:"A written article, essay, or reference page.",extraDetails:"Best for text-heavy pieces you read more than interact with."},video:{description:"A video item centered on watching.",extraDetails:"Best for standalone videos outside a channel or series."},video_series:{description:"A show, series, or recurring video program.",extraDetails:"Best for multi-episode viewing and series-level organization."},video_game:{description:"A video game or game experience.",extraDetails:"Best for individual games, titles, and play-focused content."},music:{description:"A music item centered on listening or musical identity.",extraDetails:"Best for artists, albums, tracks, and music-focused references."},song:{description:"A single song or track.",extraDetails:"Best for one specific piece of music rather than a broader artist or catalog."},project:{description:"A project with ongoing work, planning, or deliverables.",extraDetails:"Best for multi-step efforts with notes, links, and attachments."},task:{description:"A discrete task or action item.",extraDetails:"Best for one thing to do, finish, or track."},person:{description:"A person, creator, or individual profile.",extraDetails:"Best for people you want to save as named reference items."},organization:{description:"A company, school, nonprofit, or other organization.",extraDetails:"Best for named groups instead of a single person or page."}};function fe(e){const i=g(e)||{name:e,icon:"file-richtext"},n=ge[e]||ke(e,i);return{value:e,text:i.name,icon:i.icon,parent:i.parent,primary:i.primary,hide:i.hide,featured:i.featured,description:n.description,extraDetails:n.extraDetails,keywords:n.keywords}}function Me(e={}){const i=new Set(["col","defaultQuickbar","defaultSharedCollection","defaultShowcaseCollection","default","tab","thing","feed_collection","pub_col_slink"]);return S.filter(n=>!i.has(n.key)).filter(n=>e.includeAdvanced===!0||ye(n.key)).filter(n=>{var c;return e.onlyThing?((c=g(n.key))==null?void 0:c.parent)==="thing"||n.key==="file_group":!0}).map(n=>fe(n.key))}function ke(e,i){const n=(i==null?void 0:i.name)||e;return(i==null?void 0:i.parent)==="link"?{description:`A URL-based ${n.toLowerCase()} item you open online.`,extraDetails:"Best for saved web destinations, services, media, and resources."}:(i==null?void 0:i.parent)==="thing"?{description:`A ${n.toLowerCase()} item with its own identity and details.`,extraDetails:"Best for named references, media, people, projects, and saved knowledge."}:{description:`Use this when the item is mainly a ${n.toLowerCase()}.`,extraDetails:"Pick the closest match for how the item should behave in Kindredly."}}const be=["website","yt_video","yt_channel"];function $(e){return!!e&&be.includes(e)}function ve(e){const{currentType:i,currentSubType:n,derivedSubType:r}=e;if(!r)return!1;const c=k(i,n)||n||null;return c===r?!0:c?$(c):!i||i==="link"}function C(e,i,n={}){const r=k(e,i)??i??"",c=r||e||"default",l=g(c)||g(e||"default")||{name:c||"Item",icon:c||"file-richtext"},p=_e(e,r||void 0,n),y=we(e),t={id:c,label:l.name,icon:l.icon,parentType:l.parent,experienceKind:"default-item",semanticKinds:[c],defaultViewMode:"default-item",defaultOpenAction:p,viewAction:y,capabilityFlags:[],pickerSummary:`${l.name} item`,fallbackChain:[p,y],schemaSource:r?"subType":"type",requirements:te(c)};switch(c){case"file_group":return{...t,experienceKind:"gallery",semanticKinds:["file_group","file"],defaultViewMode:"gallery",capabilityFlags:["supportsAttachments"],pickerSummary:"File group with a gallery-first attachment experience."};case"website":return{...t,experienceKind:"generic-link",semanticKinds:["website","link"],resourceType:I.SITE_ROOT,capabilityFlags:["prefersExternalOpen"],pickerSummary:"Website link with generic open behavior."};case"map":return{...t,experienceKind:"generic-link",semanticKinds:["map","link"],capabilityFlags:["prefersExternalOpen"],pickerSummary:"Interactive map embedded inline, with an open-original link."};case"yt_video":return{...t,experienceKind:"video",semanticKinds:["video","youtube"],provider:"youtube",resourceType:I.YT_VIDEO,defaultViewMode:"video",capabilityFlags:["supportsProviderIdentity","prefersExternalOpen"],pickerSummary:"YouTube video with provider-aware open behavior."};case"image":return{...t,experienceKind:"image",semanticKinds:["image","file"],defaultViewMode:"image",capabilityFlags:["supportsAttachments"],pickerSummary:"Single image item backed by an attachment."};case"video":return{...t,experienceKind:"video",semanticKinds:["video","file"],defaultViewMode:"video",capabilityFlags:["supportsAttachments"],pickerSummary:"Single video item backed by an attachment."};case"yt_channel":return{...t,experienceKind:"channel",semanticKinds:["channel","youtube"],provider:"youtube",resourceType:I.YT_CHANNEL,defaultViewMode:"channel",capabilityFlags:["supportsProviderIdentity","supp
1ortsFeedDiscovery","prefersExternalOpen"],pickerSummary:"YouTube channel with provider-aware open behavior."};case"podcast":return{...t,experienceKind:"audio",semanticKinds:["podcast","audio"],defaultViewMode:"audio",capabilityFlags:["supportsFeedDiscovery","supportsStructuredMetadata","supportsMediaProviders"],pickerSummary:"Podcast that can be played through a choice of media providers."};case"music":case"song":return{...t,experienceKind:"audio",semanticKinds:[c,"audio"],defaultViewMode:"audio",capabilityFlags:["supportsStructuredMetadata","supportsMediaProviders"],pickerSummary:`${l.name} that can be played through a choice of media providers.`};case"content_feed":return{...t,experienceKind:"reader",semanticKinds:["content_feed","feed"],defaultViewMode:"reader",capabilityFlags:["supportsFeedDiscovery","supportsStructuredMetadata"],pickerSummary:"Content feed link (RSS/Atom) that can opt into feed affordances."};case"book":case"ebook":return{...t,experienceKind:"reader",semanticKinds:["book","reader"],defaultViewMode:"reader",capabilityFlags:["supportsStructuredMetadata","supportsAttachments"],pickerSummary:"Book-like item that prefers reader-style experiences."};case"kin_app":return{...t,experienceKind:"app-runner",semanticKinds:["app"],defaultViewMode:"app-runner",capabilityFlags:["supportsEmbeddedRun","supportsStructuredMetadata"],pickerSummary:"Kindredly app with runnable app behavior."};case"lesson":return{...t,experienceKind:"lesson",semanticKinds:["lesson"],defaultViewMode:"app-runner",capabilityFlags:["supportsStructuredMetadata","supportsAttachments","supportsEmbeddedRun"],pickerSummary:"Step-through lesson with quizzes, scored with retry."};case"person":case"organization":case"location":case"film":case"video_series":return{...t,experienceKind:"reference",semanticKinds:[c,"reference"],defaultViewMode:"reference",capabilityFlags:["supportsStructuredMetadata"],pickerSummary:`${l.name} reference with structured metadata.`};case"event":return{...t,experienceKind:"reference",semanticKinds:["event"],defaultViewMode:"reference",capabilityFlags:["supportsStructuredMetadata"],pickerSummary:"Calendar event with a time, a place, and optional repeats."};case"link":return{...t,experienceKind:"generic-link",semanticKinds:["link"],capabilityFlags:["prefersExternalOpen"],pickerSummary:"Generic link item."};default:return t}}function _e(e,i,n={}){return n&&i&&i in n?n[i]:i&&["feed_collection"].includes(i||"")||i&&["podcast"].includes(i||"")?"openItem":i&&["yt_channel","yt_video"].includes(i||"")?"openLink":i&&["kin_app"].includes(i||"")?"runApp":i&&["map"].includes(i||"")?"openItem":["link"].includes(e)?"openLink":e=="col"?"openCol":e=="tab"?"openTab":"openItem"}function we(e,i){return["col"].includes(e)?"openCol":"openItem"}let x;function Te(){return x||(x=Object.fromEntries(S.map(e=>[e.key,e]))),x}function g(e){return Te()[e]}function k(e,i){return e==="thing"&&(!i||i==="thing")?"information":i?i==="info"?"information":e&&i===e||!g(i)?null:i:null}function Ie(e,i){return k(e,i)||e||"default"}function xe(e,i){return e==="information"?!0:k(e,i)==="information"||i==="info"}function Ne(e,i){return e==="note"||xe(e,i)}function $e(e,i){return k(e,i)==="task"}function Ce(e,i){return k(e,i)==="event"}const Ae={YOUTUBE_CHANNEL:"yt_channel",YT_CHANNEL:"yt_channel",YOUTUBE_VIDEO:"yt_video",YT_VIDEO:"yt_video",SITE_ROOT:"website"};function Se(e,i){var p,y,t,o;const n=(y=(p=e==null?void 0:e.tsManifest)==null?void 0:p.mediaMetadata)==null?void 0:y.subType;if(ae(n))return n;const r=i||(e==null?void 0:e.url),c=r?(t=pe(r))==null?void 0:t.subType:void 0;if(c)return c;const l=(o=e==null?void 0:e.tsExtractedInfo)==null?void 0:o.pageType;return l&&Ae[l]||null}function P(e){return ne(e==null?void 0:e.feeds,"audio")?"podcast":null}function De(e){let i=(e==null?void 0:e.subType)??null;return(e==null?void 0:e.type)==="link"&&(!i||$(i))&&(i=Se(e==null?void 0:e.meta,e==null?void 0:e.url)??i??P(e==null?void 0:e.info)),i==="content_feed"&&(i=null),i}function Pe(e){const i=P(e==null?void 0:e.info);return i&&ve({currentType:e==null?void 0:e.type,currentSubType:e==null?void 0:e.subType,derivedSubType:i})?i:null}function Oe(e){return Ie(e==null?void 0:e.type,De(e))}function Le(e,i,n={}){const c=g(i||e||"default"),l=C(e,i,n);return{...c,contractId:l.id,experienceKind:l.experienceKind,defaultViewMode:l.defaultViewMode,capabilityFlags:l.capabilityFlags,provider:l.provider,resourceType:l.resourceType,openAction:l.defaultOpenAction,viewAction:l.viewAction}}function Fe(e,i,n){const r=C(e||"",i||""),c=r.experienceKind,l=c==="generic-link"&&n?"url":"label";return{label:r.label,icon:r.icon,experienceKind:c,leadWith:l}}const Ke={flag_sexual_content:"Sexual or provocative content",flag_drugs:"Drugs or alcohol related content",flag_mild_language:"Mild Language",flag_strong_language:"Strong Language",flag_violence:"Violence"},f=e=>{if(e)return e==="eduval_academic"?"eduval_educational":e==="eduval_mixed"?"eduval_edutainment":e==="eduval_social"?"eduval_junk":["eduval_educational","eduval_edutainment","eduval_fun","eduval_task","eduval_unknown","eduval_junk"].includes(e)?e:void 0},Ue=e=>{if(Array.isArray(e))for(const i of e){const n=f(i);if(n&&n!=="eduval_unknown")return n}return"eduval_unknown"},Be={eduval_unknown:{title:"Unassigned",tagline:"Not reviewed yet — will be auto-categorized as we learn more.",description:"Use when the content has not been reviewed yet, is newly added, or we do not have enough signal to classify it. Kindredly may auto-categorize over time as we observe patterns — you can always override it for clarity.",ingredients:[{name:"Unknown intent",n
1ote:"We do not know why the user is here yet."},{name:"Mixed signals",note:"Some educational, some entertainment, unclear overall."},{name:"Low confidence classification",note:"Site/app does not match known patterns."}],dailyDietGuidance:["Treat as “needs labeling” — review soon after it appears in a child’s routine.","If you notice repeated usage, assign a specific type for better limits and reporting."],examples:["Newly discovered websites","New YouTube channels","Uncategorized apps"]},eduval_educational:{title:"Educational",tagline:"Primarily learning-oriented.",description:"Content created to teach, inform, or build skills. This can include creative learning activities like drawing, painting, crafting, and making — less structured than academic content, but still learning-first.",ingredients:[{name:"Skill-building"},{name:"Clear explanations"},{name:"Helpful examples"}],dailyDietGuidance:["A strong default for “good internet”.","Pair with reflection: “What did you learn?”"],examples:["Tutorials","Documentaries","How-to guides"]},eduval_edutainment:{title:"Edu-tainment",tagline:"Entertainment with some learning value.",description:"Designed to engage first and teach second. Can be a great bridge into deeper learning when guided.",ingredients:[{name:"Engagement first"},{name:"Teachable moments"},{name:"Light facts and explanations"}],dailyDietGuidance:["Good in moderation; best used as a gateway to “Educational” or “Academic”.","Watch for autoplay and endless feeds that erode the learning portion."],examples:["Educational games","Light science videos","History “fun facts” content"]},eduval_fun:{title:"Entertainment",tagline:"Fun-first, low learning density.",description:"Primarily for enjoyment and relaxation. Healthy entertainment is real — but it should not crowd out sleep, school, and relationships.",ingredients:[{name:"Relaxation and fun"},{name:"Story and humor"},{name:"Occasional learning (incidental)"}],dailyDietGuidance:["Plan it like dessert: enjoyable, intentional, and time-bounded.","Prefer finite experiences over infinite scroll."],examples:["Shows/movies","Non-educational games","Comedy videos"]},eduval_task:{title:"Task-Related",tagline:"Utility and productivity.",description:"Tools and resources used to complete a task: writing, planning, schoolwork logistics, creative projects, and communication for a purpose.",ingredients:[{name:"Utility"},{name:"Focus support"},{name:"Clear end states",note:"A task finishes; it’s not infinite."}],dailyDietGuidance:["Great default for tools and work sessions.","If a “task tool” becomes procrastination, reconsider its type."],examples:["Docs and notes","Calendars","Research tools"]},eduval_junk:{title:"Junk Content",tagline:"Junk, high pull.",description:"Content that is misleading, clickbait, rage-bait, or designed to be compulsive. Not “evil”, but easy to overconsume and often leaves users feeling worse.",ingredients:[{name:"Clickbait / compulsion loops"},{name:"Low informational value"},{name:"High monetization pressure",note:"Heavy ads, tracking, or manipulative tactics."}],dailyDietGuidance:["Treat as “rare and intentional” — use strong time limits or blocks.","If it causes conflict, sleep loss, or mood issues, reduce further."],examples:["Clickbait sites","Endless meme scrolling","Low-quality viral feeds"]}},Ge={social:{title:"Social Media",tagline:"Feeds built to keep you scrolling.",description:"Platforms centered on feeds, followers, and reactions. Some genuine connection and creativity lives here, but the core design — infinite scroll, notifications, and algorithmic recommendations — is tuned to maximize time spent, which makes it easy to overuse.",ingredients:[{name:"Infinite scroll & autoplay",note:"No natural stopping point."},{name:"Algorithmic feed",note:"Optimized for engagement, not wellbeing."},{name:"Social comparison",note:"Likes, follower counts, and curated highlight reels."},{name:"Notifications & streaks",note:"Designed to pull you back in."}],dailyDietGuidance:["Best with a firm time limit and an allowed-hours window (not right before bed).","For younger kids, consider blocking entirely under content filtering.","Talk about what they see — comparison and pressure matter as much as minutes."],examples:["Instagram","TikTok","Snapchat","X / Twitter","Facebook"]},video:{title:"Video Sites",tagline:"Streaming video — quality varies wildly.",description:"General-purpose video platforms that mix genuinely great learning content with entertainment and junk. Because the same site hosts all of it, autoplay and recommendations can quickly pull a focused session into an endless watch-next spiral.",ingredients:[{name:"Autoplay & “up next”",note:"One video becomes ten."},{name:"Recommendation rabbit holes",note:"The algorithm steers what comes next."},{name:"Mixed quality",note:"Educational, entertainment, and junk side by side."},{name:"Ads & sponsorships",note:"Common, and not always obvious to kids."}],dailyDietGuidance:["Set a video-sites time limit so a quick clip doesn’t become an afternoon.","Prefer library-approved channels or specific videos over open browsing for young kids.","Turn the “what did you watch?” check-in into a habit."],examples:["YouTube"]}};let h={blueDark:"#1d4ed8",redDark:"#dc2626",greenDark:"#16a34a",orange:"#f97316",sky:"#0ea5e9",gray:"#6b7280"};const D=[{key:"eduval_unknown",name:"Unassigned (auto)",selectedName:"Unknown",de
1scription:"Not assigned or unknown.",extraDetails:"Unassigned or unknown value",hideFromSearch:!0,color:h.gray,icon:"question-circle"},{key:"eduval_task",name:"Task-Related",description:"Productivity or task-related",extraDetails:"Content or tools designed to help users complete tasks, improve organization, or boost efficiency. Includes document management,productivity apps and resources.",color:h.sky,icon:"check2-square"},{key:"eduval_educational",name:"Educational",description:"Primarily educational",extraDetails:"Content created to teach, inform, or instruct the audience. Examples include tutorials, how-to guides, and instructional materials commonly used in schools, training programs, and online courses.",color:h.blueDark,icon:"book"},{key:"eduval_edutainment",name:"Edu-tainment",description:"Contains some educational value",extraDetails:"A mix of education and entertainment. Designed to inform while engaging the audience, such as educational games, documentaries, or educational TV shows.",color:h.greenDark,icon:"journal-text"},{key:"eduval_fun",name:"Entertainment",description:"Wholesome entertainment",extraDetails:"Content focused on entertainment and enjoyment, suitable for general audiences.",color:h.orange,icon:"emoji-smile"},{key:"eduval_junk",name:"Junk Content",selectedName:"Junk",description:"Potentially unhealthy or low-value",extraDetails:"Content considered addictive, misleading, clickbait, or lacking substantive value. Acceptable occasionally, but best consumed in moderation.",hideFromSearch:!0,color:h.redDark,icon:"exclamation-triangle"}],O=[{key:"minage_na",name:"Min age: N/A",selectedName:"N/A"},{key:"minage_unknown",name:"Min age: Unassigned",selectedName:"Unassigned"},{key:"minage_prek",name:"Min age 0+ (Pre-K)",selectedName:"0+ (Pre-K)"},{key:"minage_kids",name:"Min age 5+ (Young Kids)",selectedName:"5+ (Young Kids)"},{key:"minage_preteen",name:"Min age 10+ (Pre-Teens)",selectedName:"10+ (Pre-Teens)"},{key:"minage_teen",name:"Min age 13+ (Teens)",selectedName:"13+ (Teens)"},{key:"minage_adult",name:"Min age 18+ (Adults)",selectedName:"18+ (Adults)"}],L=[{key:"ta_all",name:"For all ages",selectedName:"All ages",icon:"people",color:"#2065c0"},{key:"ta_prek",name:"For Pre-K (0-5)",selectedName:"Pre-K",icon:"person",color:"#0ea5e9"},{key:"ta_kids",name:"For Young Kids (5-10)",selectedName:"Young Kids",icon:"person",color:"#16a34a"},{key:"ta_preteen",name:"For Pre-Teens (10-12)",selectedName:"Pre-Teens",icon:"person",color:"#65a30d"},{key:"ta_teen",name:"For Teens (13-17)",selectedName:"Teens",icon:"person",color:"#7c3aed"},{key:"ta_adult",name:"For Adults",selectedName:"Adults",icon:"person",color:"#64748b"}],F=[{key:"cost_free",name:"Free",selectedName:"Free",icon:"cash-coin",color:"#16a34a"},{key:"cost_freewithpaid",name:"Partially Free",selectedName:"Partial",icon:"cash-coin",color:"#2065c0"},{key:"cost_paid",name:"Paid",selectedName:"Paid",icon:"cash-coin",color:"#2065c0"}],K=[{key:"ads_no",name:"No Ads",selectedName:"No Ads",icon:"badge-ad",color:"#16a34a"},{key:"ads_l",name:"Low",selectedName:"Low Ads",icon:"badge-ad",color:"#65a30d"},{key:"ads_m",name:"Medium",selectedName:"Some Ads",icon:"badge-ad",color:"#f88e42"},{key:"ads_h",name:"High",selectedName:"Heavy Ads",icon:"badge-ad",color:"#dc2626"}],U=[{key:"costd_pay2rm",name:"Pay to remove Ads"},{key:"costd_no3rdpartyads",name:"No 3rd party Ads"},{key:"costd_nosignin",name:"No account needed"},{key:"costd_opensource",name:"Open Source"}],B=[{key:"ct_app",name:"App or tool"},{key:"ct_article",name:"Article"},{key:"ct_cntcreator",name:"Content Creator"},{key:"ct_game",name:"Game"},{key:"ct_music",name:"Music"},{key:"ct_org",name:"Organzation"},{key:"ct_phy_product",name:"Physical Product"},{key:"ct_ref",name:"Reference/Data Resource"},{key:"ct_video",name:"Video"}],G=[{key:"topic_streaming_tv",name:"Streaming TV",description:"Shows and streaming TV content",icon:"tv"},{key:"topic_movies",name:"Movies",description:"Movie watching and film content",icon:"film"},{key:"topic_kids_shows",name:"Kids Shows",description:"Child-focused shows and series",icon:"emoji-smile"},{key:"topic_anime",name:"Anime",description:"Anime shows and films",icon:"tv"},{key:"topic_music_listening",name:"Music (Listening)",description:"Listening to music and playlists",icon:"music-note-beamed"},{key:"topic_music_creation",name:"Music (Creating)",description:"Making, composing, or producing music",icon:"music-note"},{key:"topic_podcasts",name:"Podcasts",description:"Podcast listening",icon:"mic"},{key:"topic_video_games",name:"Video Games",description:"Gaming (general)",icon:"controller"},{key:"topic_sandbox_games",name:"Sandbox / Builder Games",description:"Minecraft-like sandbox play",icon:"box"},{key:"topic_memes_humor",name:"Memes & Humor",description:"Humor, memes, comedy content",icon:"emoji-laughing"},{key:"topic_social_feed",name:"Social Feed",description:"Algorithmic social feeds and timelines",icon:"people"},{key:"topic_forums",name:"Forums / Communities",description:"Forums, message boards, community threads",icon:"chat-dots"},{key:"topic_group_chat",name:"Group Chat",description:"Messaging and group chat apps",icon:"chat-square-text"},{key:"topic_creator_channels",name:"Creator Channels",description:"Creator channels and subscriptions",icon:"person-video3"},{key:"topic_short_video_infinite_scroll",name:"Short Video (Infinite Scroll)",description:"Endless short-form video feeds",icon:"arrow-repeat"},{key:"topic_clickbait_sensational_news",name:"Clickbait / Sensational News",description:"Sensational, rage-bait, or clickbait news",icon:"newspaper"},{key:"topic_homework_help",name:"Homework Help",description:"Homework assistance and study help",icon:"mortarboard"},{key:"topic_math_practice",name:"Math Practice",description:"Math drills, practice, and tutoring",icon:"calculator"},{key:"topic_language_learning",name:"Language Learning",description:"Language learning tools and lessons",icon:"translate"},{key:"topic_coding_tutorials",name:"Coding Tutorials",description:"Programming tutorials and lessons",icon:"code-slash"},{key:"topic_science_learning",name:"Science Learning",description:"Science education and experiments",icon:"beaker"},{key:"topic_history_civics",name:"History & Civics",description:"History, civics, and society learning",icon:"book"},{key:"topic_reference_research",name:"Reference & Research",description:"Reference and research resources",icon:"search"},{key:"topic_documentaries",name:"Documentaries",description:"Educational documentaries",icon:"camera-reels"}],V=[{key:"intent_learn",name:"Learn",description:"Learning, studying, skill-building",icon:"mortarboard"},{key:"intent_create",name:"Create",description:"Making/building something (projects, art, game dev)",icon:"brush"},{key:"intent_task",name:"Task",description:"Getting something done (planning, docs, logistics)",icon:"check2-square"},{key:"intent_play",name:"Play",description:"Playing games / play-first",icon:"controller"},{key:"intent_relax",name:"Relax",description:"Unwinding, entertainment, leisure",icon:"emoji-smile"},{key:"intent_socialize",name:"Socialize",description:"Chatting, posting, social interaction",icon:"people"},{key:"intent_news",name:"News",description:"Reading news and current events",icon:"newspaper"},{key:"intent_doomscroll",name:"Doomscroll",description:"Endless feed scrolling / high-pull consumption",icon:"arrow-repeat"}],R=[{key:"design_clean",name:"Clean & simple",selectedName:"Clean",description:"Focused, uncluttered UI with minimal distractions.",icon:"window",color:"#16a34a"},{key:"design_light",name:"Mostly clean",selectedName:"Mostly clean",description:"Generally focused, with minor visual clutter.",icon:"window",color:"#65a30d"},{key:"design_busy",name:"Somewhat distracting",selectedName:"Somewhat distracting",description:"Busy layout with notable distractions.",icon:"window",color:"#f88e42"},{key:"design_noisy",name:"Very distracting & noisy",selectedName:"Very distracting",description:"Cluttered, noisy, attention-grabbing UI.",icon:"window",color:"#dc2626"},{key:"design_unknown",name:"Unassigned (auto)",selectedName:"Unknown",de
1scription:"Not assigned or unknown.",hideFromSearch:!0,icon:"window",color:h.gray}],H=[{key:"dtag_kidfriendly",name:"Kid-friendly design",selectedName:"Kid-friendly",description:"Bright, playful, age-appropriate UI designed for children.",icon:"emoji-smile",color:"#2065c0"}],W=[{key:"aud_educator",name:"For teachers",selectedName:"For teachers",description:"Aimed at teachers/educators (lesson plans, classroom resources).",icon:"easel",color:"#7c3aed"},{key:"aud_parent",name:"For parents",selectedName:"For parents",description:"Aimed at parents/caregivers.",icon:"people",color:"#0d9488"}],j=[{key:"fresh_active",name:"Actively updated",selectedName:"Active",description:"The source is actively maintained and kept up to date.",icon:"arrow-repeat",color:"#16a34a"},{key:"fresh_aging",name:"Aging",selectedName:"Aging",description:"The source is updated infrequently and is starting to show its age.",icon:"clock-history",color:"#d97706"},{key:"fresh_outdated",name:"Outdated / inactive",selectedName:"Outdated",description:"The source is no longer actively maintained; content may be out of date.",icon:"clock-history",color:"#64748b"},{key:"fresh_unknown",name:"Unassigned (auto)",selectedName:"Unknown",description:"Not assigned or unknown.",hideFromSearch:!0,icon:"clock-history",color:h.gray}];function Ve(e){return e==="fresh_aging"||e==="fresh_outdated"}const z=[{key:"priv_none",name:"No privacy concerns found",selectedName:"No privacy concerns",description:"Checked: it asks a child for nothing, and does not track for advertising.",icon:"shield-check",color:"#16a34a"},{key:"priv_details",name:"Asks a child for personal details",selectedName:"Asks for personal details",description:"A name, email, phone number, photo or voice, address or location, on a form or in a chatbot.",icon:"person-lines-fill",color:"#f88e42"},{key:"priv_adtracking",name:"Tracks for advertising",selectedName:"Tracks for ads",description:"Ad trackers on the page, or ads chosen from what someone does.",icon:"eye",color:"#f88e42"},{key:"priv_nopolicy",name:"No privacy policy",selectedName:"No privacy policy",description:"It asks for details or tracks, and says nothing about what it does with them.",icon:"file-earmark-x",color:"#dc2626"}],Y=[{key:"ai_none",name:"No AI features found",selectedName:"No AI features",description:"Checked: no AI chat, no AI companion, and it does not hand over finished answers.",icon:"shield-check",color:"#16a34a"},{key:"ai_chat",name:"Chat with an AI",selectedName:"AI chat",description:"A chatbot a child can type anything to.",icon:"chat-dots",color:"#2065c0"},{key:"ai_friend",name:"AI friend or companion",selectedName:"AI friend",description:"An AI that acts as a friend, companion or confidant.",icon:"robot",color:"#dc2626"},{key:"ai_offload",name:"Does the thinking for them",selectedName:"Does the thinking",description:"It hands over finished answers, writing or solutions in place of the child working them out.",icon:"magic",color:"#f88e42"}],Re={eduValue:D.map(e=>e.key),minAgeGroup:O.map(e=>e.key),targetAudiences:L.map(e=>e.key),cost:F.map(e=>e.key),ads:K.map(e=>e.key),costDetails:U.map(e=>e.key),contentTypes:B.map(e=>e.key),topics:G.map(e=>e.key),intent:V.map(e=>e.key),design:R.map(e=>e.key),designTags:H.map(e=>e.key),audienceRoles:W.map(e=>e.key),freshness:j.map(e=>e.key),privacy:z.map(e=>e.key),aiFeatures:Y.map(e=>e.key)},q={eduValue:D,minAgeGroup:O,targetAudiences:L,cost:F,ads:K,costDetails:U,contentTypes:B,topics:G,intent:V,design:R,designTags:H,audienceRoles:W,freshness:j,privacy:z,aiFeatures:Y},A=Object.fromEntries(D.map(e=>[e.key,e])),T=Object.fromEntries(Object.values(q).flat().map(e=>[e.key,e]));function He(){return q}function We(e){var i;return(i=T[e])==null?void 0:i.name}function je(e){return T[e]}function ze(e){const i=T[e];return(i==null?void 0:i.selectedName)||(i==null?void 0:i.name)}function Ye(e){const i=f(e);return A[i||e]}function qe(e){var n,r;const i=f(e);return((n=A[i||e])==null?void 0:n.selectedName)||((r=A[i||e])==null?void 0:r.name)}const Ze=e=>["eduval_educational"].includes(e);function Z(e){const i={eduValue:void 0,minAgeGroup:void 0,targetAudiences:[],cost:void 0,ads:void 0,costDetails:[],contentTypes:[],topics:[],intent:void 0,design:void 0,designTags:[],audienceRoles:[],freshness:void 0,privacy:[],aiFeatures:[]};try{for(const n of e){const r=n;n.startsWith("eduval_")?i.eduValue=f(r)||r:n.startsWith("minage_")?i.minAgeGroup=r:n.startsWith("ta_")?i.targetAudiences.push(r):n.startsWith("cost_")?i.cost=r:n.startsWith("ads_")||n.startsWith("ad_")?i.ads=r:n.startsWith("costd_")?i.costDetails.push(r):n.startsWith("ct_")?i.contentTypes.push(r):n.startsWith("topic_")?i.topics.push(r):n.startsWith("intent_")?i.intent=r:n.startsWith("design_")?i.design=r:n.startsWith("dtag_")?i.designTags.push(r):n.startsWith("aud_")?i.audienceRoles.push(r):n.startsWith("fresh_")?i.freshness=r:n.startsWith("priv_")?i.privacy.push(r):n.startsWith("ai_")&&i.aiFeatures.push(r)}}catch{return i}return i}function Je(e){if(!Array.isArray(e)||e.length===0)return!1;const i=Z(e);return!!i.eduValue&&i.eduValue!=="eduval_unknown"}function Qe(e){const i={eduValue:void 0,minAgeGroup:void 0,targetAudiences:[],cost:void 0,ads:void 0,costDetails:[],contentTypes:[],topics:[],intent:void 0,design:void 0,designTags:[],audienceRoles:[],freshness:void 0,privacy:[],aiFeatures:[]};try{for(const n of e){const r={...T[f(n)||n],key:f(n)||n};n.startsWith("eduval_")?i.eduValue=r:n.startsWith("minage_")?i.minAgeGroup=r:n.startsWith("ta_")?i.targetAudiences.push(r):n.startsWith("cost_")?i.cost=r:n.startsWith("ads_")||n.startsWith("ad_")?i.ads=r:n.startsWith("costd_")?i.costDetails.push(r):n.startsWith("ct_")?i.contentTypes.push(r):n.startsWith("topic_")?i.topics.push(r):n.startsWith("intent_")?i.intent=r:n.startsWith("design_")?i.design=r:n.startsWith("dtag_")?i.designTags.push(r):n.startsWith("aud_")?i.audienceRoles.push(r):n.startsWith("fresh_")?i.freshness=r:n.startsWith("priv_")?i.privacy.push(r):n.startsWith("ai_")&&i.aiFeatures.push(r)}}catch{return i}return i}function Xe(e){return Z(e)}export{ze as A,fe as B,Me as C,ye as D,Je as E,C as F,Ne as G,Ve as H,S as I,q as J,Ze as K,De as L,te as M,ne as N,Le as O,M as P,pe as Q,Pe as R,Ue as S,$e as T,Ce as U,L as V,Re as W,Xe as a,Se as b,Fe as c,qe as d,D as e,Z as f,g,We as h,f as i,Ke as j,F as k,j as l,K as m,k as n,R as o,O as p,z as q,Oe as r,ve as s,Y as t,He as u,Ye as v,Ge as w,Be as x,Qe as y,je as z};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.