[{"data":1,"prerenderedAt":1868},["ShallowReactive",2],{"navigation":3,"\u002Fdataviews\u002Fdesign-form\u002Fcode":773,"\u002Fdataviews\u002Fdesign-form\u002Fcode-surround":1863},[4,28,63,85,103,112,269,355,453,485,506,542,576,594,647,669,693,721,747],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Getting Started","\u002Fgetting-started","01.getting-started\u002F01.index",[9,11,15,19,23],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Installation","\u002Fgetting-started\u002Finstallation","01.getting-started\u002F02.installation",{"title":16,"path":17,"stem":18},"Quickstart with AI","\u002Fgetting-started\u002Fquickstart-with-ai","01.getting-started\u002F03.quickstart-with-ai",{"title":20,"path":21,"stem":22},"Quickstart by Hand","\u002Fgetting-started\u002Fquickstart-by-hand","01.getting-started\u002F04.quickstart-by-hand",{"title":24,"path":25,"stem":26},"The Admin","\u002Fgetting-started\u002Fadmin-tour","01.getting-started\u002F05.admin-tour","i-lucide-rocket",{"title":29,"icon":30,"path":31,"stem":32,"children":33,"page":62},"Concepts","i-lucide-lightbulb","\u002Fconcepts","02.concepts",[34,38,42,46,50,54,58],{"title":35,"path":36,"stem":37},"PostgreSQL First","\u002Fconcepts\u002Fpostgresql-first","02.concepts\u002F01.postgresql-first",{"title":39,"path":40,"stem":41},"Resources","\u002Fconcepts\u002Fresources","02.concepts\u002F02.resources",{"title":43,"path":44,"stem":45},"Users and Roles","\u002Fconcepts\u002Fusers-and-roles","02.concepts\u002F03.users-and-roles",{"title":47,"path":48,"stem":49},"Permissions","\u002Fconcepts\u002Fpermissions","02.concepts\u002F04.permissions",{"title":51,"path":52,"stem":53},"Drafts and Publishing","\u002Fconcepts\u002Fdrafts-and-publishing","02.concepts\u002F05.drafts-and-publishing",{"title":55,"path":56,"stem":57},"Audit and Events","\u002Fconcepts\u002Faudit-and-events","02.concepts\u002F06.audit-and-events",{"title":59,"path":60,"stem":61},"Object Access","\u002Fconcepts\u002Fobject-access","02.concepts\u002F07.object-access",false,{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":62},"App","i-lucide-app-window","\u002Fapp","03.app",[69,73,77,81],{"title":70,"path":71,"stem":72},"The App","\u002Fapp\u002Foverview","03.app\u002F01.overview",{"title":74,"path":75,"stem":76},"DataViews","\u002Fapp\u002Fdataviews","03.app\u002F02.dataviews",{"title":78,"path":79,"stem":80},"Dashboards","\u002Fapp\u002Fdashboards","03.app\u002F03.dashboards",{"title":82,"path":83,"stem":84},"Arrange menu","\u002Fapp\u002Farrange-menu","03.app\u002F04.arrange-menu",{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":62},"Database","i-lucide-database","\u002Fdatabase","04.database",[91,95,99],{"title":92,"path":93,"stem":94},"Tables","\u002Fdatabase\u002Ftables","04.database\u002F01.tables",{"title":96,"path":97,"stem":98},"Views","\u002Fdatabase\u002Fviews","04.database\u002F02.views",{"title":100,"path":101,"stem":102},"Functions","\u002Fdatabase\u002Ffunctions","04.database\u002F03.functions",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":62},"SQL Console","i-lucide-square-terminal","\u002Fsql-console","05.sql-console",[109],{"title":104,"path":110,"stem":111},"\u002Fsql-console\u002Foverview","05.sql-console\u002F01.overview",{"title":74,"icon":113,"path":114,"stem":115,"children":116,"page":62},"i-lucide-layout-list","\u002Fdataviews","06.dataviews",[117,121,125,129,183,214],{"title":118,"path":119,"stem":120},"Overview","\u002Fdataviews\u002Foverview","06.dataviews\u002F01.overview",{"title":122,"path":123,"stem":124},"Creating a DataView","\u002Fdataviews\u002Fcreating","06.dataviews\u002F02.creating",{"title":126,"path":127,"stem":128},"Publishing","\u002Fdataviews\u002Fpublishing","06.dataviews\u002F03.publishing",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Types","i-lucide-shapes","\u002Fdataviews\u002Ftypes","06.dataviews\u002F04.types",[135,139,143,147,151,155,159,163,167,171,175,179],{"title":136,"path":137,"stem":138},"Table","\u002Fdataviews\u002Ftypes\u002Ftable","06.dataviews\u002F04.types\u002F01.table",{"title":140,"path":141,"stem":142},"Cards","\u002Fdataviews\u002Ftypes\u002Fcards","06.dataviews\u002F04.types\u002F02.cards",{"title":144,"path":145,"stem":146},"Kanban","\u002Fdataviews\u002Ftypes\u002Fkanban","06.dataviews\u002F04.types\u002F03.kanban",{"title":148,"path":149,"stem":150},"Calendar","\u002Fdataviews\u002Ftypes\u002Fcalendar","06.dataviews\u002F04.types\u002F04.calendar",{"title":152,"path":153,"stem":154},"Gantt","\u002Fdataviews\u002Ftypes\u002Fgantt","06.dataviews\u002F04.types\u002F05.gantt",{"title":156,"path":157,"stem":158},"Map","\u002Fdataviews\u002Ftypes\u002Fmap","06.dataviews\u002F04.types\u002F06.map",{"title":160,"path":161,"stem":162},"Tree","\u002Fdataviews\u002Ftypes\u002Ftree","06.dataviews\u002F04.types\u002F07.tree",{"title":164,"path":165,"stem":166},"Form","\u002Fdataviews\u002Ftypes\u002Fform","06.dataviews\u002F04.types\u002F08.form",{"title":168,"path":169,"stem":170},"Master-detail","\u002Fdataviews\u002Ftypes\u002Fmaster-detail","06.dataviews\u002F04.types\u002F09.master-detail",{"title":172,"path":173,"stem":174},"Settings","\u002Fdataviews\u002Ftypes\u002Fsettings","06.dataviews\u002F04.types\u002F10.settings",{"title":176,"path":177,"stem":178},"Custom","\u002Fdataviews\u002Ftypes\u002Fcustom","06.dataviews\u002F04.types\u002F11.custom",{"title":180,"path":181,"stem":182},"External Frame","\u002Fdataviews\u002Ftypes\u002Fexternal-frame","06.dataviews\u002F04.types\u002F12.external-frame",{"title":172,"icon":184,"path":185,"stem":186,"children":187,"page":62},"i-lucide-settings-2","\u002Fdataviews\u002Fsettings","06.dataviews\u002F05.settings",[188,192,196,199,202,206,210],{"title":189,"path":190,"stem":191},"General","\u002Fdataviews\u002Fsettings\u002Fgeneral","06.dataviews\u002F05.settings\u002F01.general",{"title":193,"path":194,"stem":195},"Data","\u002Fdataviews\u002Fsettings\u002Fdata","06.dataviews\u002F05.settings\u002F02.data",{"title":96,"path":197,"stem":198},"\u002Fdataviews\u002Fsettings\u002Fviews","06.dataviews\u002F05.settings\u002F03.views",{"title":164,"path":200,"stem":201},"\u002Fdataviews\u002Fsettings\u002Fform","06.dataviews\u002F05.settings\u002F04.form",{"title":203,"path":204,"stem":205},"Actions","\u002Fdataviews\u002Fsettings\u002Factions","06.dataviews\u002F05.settings\u002F05.actions",{"title":207,"path":208,"stem":209},"Security","\u002Fdataviews\u002Fsettings\u002Fsecurity","06.dataviews\u002F05.settings\u002F06.security",{"title":211,"path":212,"stem":213},"Versions","\u002Fdataviews\u002Fsettings\u002Fversions","06.dataviews\u002F05.settings\u002F07.versions",{"title":215,"icon":216,"path":217,"stem":218,"children":219,"page":62},"Design Form","i-lucide-pencil-ruler","\u002Fdataviews\u002Fdesign-form","06.dataviews\u002F06.design-form",[220,223,257,261,265],{"title":118,"path":221,"stem":222},"\u002Fdataviews\u002Fdesign-form\u002Foverview","06.dataviews\u002F06.design-form\u002F01.overview",{"title":224,"icon":131,"path":225,"stem":226,"children":227,"page":62},"Widgets","\u002Fdataviews\u002Fdesign-form\u002Fwidgets","06.dataviews\u002F06.design-form\u002F02.widgets",[228,231,234,238,242,246,250,254],{"title":224,"path":229,"stem":230},"\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Foverview","06.dataviews\u002F06.design-form\u002F02.widgets\u002F01.overview",{"title":164,"path":232,"stem":233},"\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Fform","06.dataviews\u002F06.design-form\u002F02.widgets\u002F02.form",{"title":235,"path":236,"stem":237},"Inputs","\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Finputs","06.dataviews\u002F06.design-form\u002F02.widgets\u002F03.inputs",{"title":239,"path":240,"stem":241},"Display","\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Fdisplay","06.dataviews\u002F06.design-form\u002F02.widgets\u002F04.display",{"title":243,"path":244,"stem":245},"Embeds","\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Fembeds","06.dataviews\u002F06.design-form\u002F02.widgets\u002F05.embeds",{"title":247,"path":248,"stem":249},"Layout","\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Flayout","06.dataviews\u002F06.design-form\u002F02.widgets\u002F06.layout",{"title":251,"path":252,"stem":253},"Overlays","\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Foverlays","06.dataviews\u002F06.design-form\u002F02.widgets\u002F07.overlays",{"title":203,"path":255,"stem":256},"\u002Fdataviews\u002Fdesign-form\u002Fwidgets\u002Factions","06.dataviews\u002F06.design-form\u002F02.widgets\u002F08.actions",{"title":258,"path":259,"stem":260},"Variables","\u002Fdataviews\u002Fdesign-form\u002Fvariables","06.dataviews\u002F06.design-form\u002F03.variables",{"title":262,"path":263,"stem":264},"Code","\u002Fdataviews\u002Fdesign-form\u002Fcode","06.dataviews\u002F06.design-form\u002F04.code",{"title":266,"path":267,"stem":268},"Formulas","\u002Fdataviews\u002Fdesign-form\u002Fformulas","06.dataviews\u002F06.design-form\u002F05.formulas",{"title":78,"icon":270,"path":271,"stem":272,"children":273,"page":62},"i-lucide-layout-dashboard","\u002Fdashboards","07.dashboards",[274,277,281,285,332],{"title":118,"path":275,"stem":276},"\u002Fdashboards\u002Foverview","07.dashboards\u002F01.overview",{"title":278,"path":279,"stem":280},"Creating a Dashboard","\u002Fdashboards\u002Fcreating","07.dashboards\u002F02.creating",{"title":282,"path":283,"stem":284},"Editor","\u002Fdashboards\u002Feditor","07.dashboards\u002F03.editor",{"title":224,"icon":286,"path":287,"stem":288,"children":289,"page":62},"i-lucide-chart-bar","\u002Fdashboards\u002Fwidgets","07.dashboards\u002F04.widgets",[290,293,297,301,305,309,313,317,321,324,328],{"title":224,"path":291,"stem":292},"\u002Fdashboards\u002Fwidgets\u002Foverview","07.dashboards\u002F04.widgets\u002F01.overview",{"title":294,"path":295,"stem":296},"Editing a Widget","\u002Fdashboards\u002Fwidgets\u002Fediting-a-widget","07.dashboards\u002F04.widgets\u002F02.editing-a-widget",{"title":298,"path":299,"stem":300},"Indicators","\u002Fdashboards\u002Fwidgets\u002Findicators","07.dashboards\u002F04.widgets\u002F03.indicators",{"title":302,"path":303,"stem":304},"Comparison","\u002Fdashboards\u002Fwidgets\u002Fcomparison","07.dashboards\u002F04.widgets\u002F04.comparison",{"title":306,"path":307,"stem":308},"Trend","\u002Fdashboards\u002Fwidgets\u002Ftrend","07.dashboards\u002F04.widgets\u002F05.trend",{"title":310,"path":311,"stem":312},"Proportion","\u002Fdashboards\u002Fwidgets\u002Fproportion","07.dashboards\u002F04.widgets\u002F06.proportion",{"title":314,"path":315,"stem":316},"Distribution and Relation","\u002Fdashboards\u002Fwidgets\u002Fdistribution-and-relation","07.dashboards\u002F04.widgets\u002F07.distribution-and-relation",{"title":318,"path":319,"stem":320},"Maps","\u002Fdashboards\u002Fwidgets\u002Fmaps","07.dashboards\u002F04.widgets\u002F08.maps",{"title":92,"path":322,"stem":323},"\u002Fdashboards\u002Fwidgets\u002Ftables","07.dashboards\u002F04.widgets\u002F09.tables",{"title":325,"path":326,"stem":327},"Visualization and Insertion","\u002Fdashboards\u002Fwidgets\u002Fvisualization-and-insertion","07.dashboards\u002F04.widgets\u002F10.visualization-and-insertion",{"title":329,"path":330,"stem":331},"SQL Conventions","\u002Fdashboards\u002Fwidgets\u002Fsql-conventions","07.dashboards\u002F04.widgets\u002F11.sql-conventions",{"title":172,"icon":184,"path":333,"stem":334,"children":335,"page":62},"\u002Fdashboards\u002Fsettings","07.dashboards\u002F05.settings",[336,339,342,345,349,352],{"title":189,"path":337,"stem":338},"\u002Fdashboards\u002Fsettings\u002Fgeneral","07.dashboards\u002F05.settings\u002F01.general",{"title":258,"path":340,"stem":341},"\u002Fdashboards\u002Fsettings\u002Fvariables","07.dashboards\u002F05.settings\u002F02.variables",{"title":193,"path":343,"stem":344},"\u002Fdashboards\u002Fsettings\u002Fdata","07.dashboards\u002F05.settings\u002F03.data",{"title":346,"path":347,"stem":348},"Share","\u002Fdashboards\u002Fsettings\u002Fshare","07.dashboards\u002F05.settings\u002F04.share",{"title":207,"path":350,"stem":351},"\u002Fdashboards\u002Fsettings\u002Fsecurity","07.dashboards\u002F05.settings\u002F05.security",{"title":211,"path":353,"stem":354},"\u002Fdashboards\u002Fsettings\u002Fversions","07.dashboards\u002F05.settings\u002F06.versions",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":62},"Workflows","i-lucide-workflow","\u002Fworkflows","08.workflows",[361,364,368,371,393,432],{"title":118,"path":362,"stem":363},"\u002Fworkflows\u002Foverview","08.workflows\u002F01.overview",{"title":365,"path":366,"stem":367},"Creating a Workflow","\u002Fworkflows\u002Fcreating","08.workflows\u002F02.creating",{"title":282,"path":369,"stem":370},"\u002Fworkflows\u002Feditor","08.workflows\u002F03.editor",{"title":372,"icon":373,"path":374,"stem":375,"children":376,"page":62},"Triggers","i-lucide-zap","\u002Fworkflows\u002Ftriggers","08.workflows\u002F04.triggers",[377,381,385,389],{"title":378,"path":379,"stem":380},"Manual","\u002Fworkflows\u002Ftriggers\u002Fmanual","08.workflows\u002F04.triggers\u002F01.manual",{"title":382,"path":383,"stem":384},"Database Event","\u002Fworkflows\u002Ftriggers\u002Fdatabase-event","08.workflows\u002F04.triggers\u002F02.database-event",{"title":386,"path":387,"stem":388},"Schedule","\u002Fworkflows\u002Ftriggers\u002Fschedule","08.workflows\u002F04.triggers\u002F03.schedule",{"title":390,"path":391,"stem":392},"Webhook","\u002Fworkflows\u002Ftriggers\u002Fwebhook","08.workflows\u002F04.triggers\u002F04.webhook",{"title":394,"icon":357,"path":395,"stem":396,"children":397,"page":62},"Steps","\u002Fworkflows\u002Fsteps","08.workflows\u002F05.steps",[398,401,405,408,412,416,420,424,428],{"title":193,"path":399,"stem":400},"\u002Fworkflows\u002Fsteps\u002Fdata","08.workflows\u002F05.steps\u002F01.data",{"title":402,"path":403,"stem":404},"Control","\u002Fworkflows\u002Fsteps\u002Fcontrol","08.workflows\u002F05.steps\u002F02.control",{"title":262,"path":406,"stem":407},"\u002Fworkflows\u002Fsteps\u002Fcode","08.workflows\u002F05.steps\u002F03.code",{"title":409,"path":410,"stem":411},"Integration","\u002Fworkflows\u002Fsteps\u002Fintegration","08.workflows\u002F05.steps\u002F04.integration",{"title":413,"path":414,"stem":415},"Communication","\u002Fworkflows\u002Fsteps\u002Fcommunication","08.workflows\u002F05.steps\u002F05.communication",{"title":417,"path":418,"stem":419},"Files","\u002Fworkflows\u002Fsteps\u002Ffiles","08.workflows\u002F05.steps\u002F06.files",{"title":421,"path":422,"stem":423},"Documents","\u002Fworkflows\u002Fsteps\u002Fdocuments","08.workflows\u002F05.steps\u002F07.documents",{"title":425,"path":426,"stem":427},"Composition","\u002Fworkflows\u002Fsteps\u002Fcomposition","08.workflows\u002F05.steps\u002F08.composition",{"title":429,"path":430,"stem":431},"Values","\u002Fworkflows\u002Fsteps\u002Fvalues","08.workflows\u002F05.steps\u002F09.values",{"title":172,"icon":184,"path":433,"stem":434,"children":435,"page":62},"\u002Fworkflows\u002Fsettings","08.workflows\u002F06.settings",[436,439,443,446,449],{"title":189,"path":437,"stem":438},"\u002Fworkflows\u002Fsettings\u002Fgeneral","08.workflows\u002F06.settings\u002F01.general",{"title":440,"path":441,"stem":442},"Trigger","\u002Fworkflows\u002Fsettings\u002Ftrigger","08.workflows\u002F06.settings\u002F02.trigger",{"title":207,"path":444,"stem":445},"\u002Fworkflows\u002Fsettings\u002Fsecurity","08.workflows\u002F06.settings\u002F03.security",{"title":211,"path":447,"stem":448},"\u002Fworkflows\u002Fsettings\u002Fversions","08.workflows\u002F06.settings\u002F04.versions",{"title":450,"path":451,"stem":452},"Runs","\u002Fworkflows\u002Fsettings\u002Fruns","08.workflows\u002F06.settings\u002F05.runs",{"title":417,"icon":454,"path":455,"stem":456,"children":457,"page":62},"i-lucide-files","\u002Ffiles","09.files",[458,461,465,469,473,477,481],{"title":118,"path":459,"stem":460},"\u002Ffiles\u002Foverview","09.files\u002F01.overview",{"title":462,"path":463,"stem":464},"Uploading","\u002Ffiles\u002Fuploading","09.files\u002F02.uploading",{"title":466,"path":467,"stem":468},"File Details","\u002Ffiles\u002Ffile-details","09.files\u002F03.file-details",{"title":470,"path":471,"stem":472},"Editing Files","\u002Ffiles\u002Fediting-files","09.files\u002F04.editing-files",{"title":474,"path":475,"stem":476},"Using Files in Tables","\u002Ffiles\u002Fusing-files-in-tables","09.files\u002F05.using-files-in-tables",{"title":478,"path":479,"stem":480},"Image Transformations","\u002Ffiles\u002Fimage-transformations","09.files\u002F06.image-transformations",{"title":482,"path":483,"stem":484},"Who Can See a File","\u002Ffiles\u002Fwho-can-see-a-file","09.files\u002F07.who-can-see-a-file",{"title":486,"icon":487,"path":488,"stem":489,"children":490,"page":62},"Templates","i-lucide-file-text","\u002Ftemplates","10.templates",[491,494,498,502],{"title":118,"path":492,"stem":493},"\u002Ftemplates\u002Foverview","10.templates\u002F01.overview",{"title":495,"path":496,"stem":497},"Emails","\u002Ftemplates\u002Femails","10.templates\u002F02.emails",{"title":499,"path":500,"stem":501},"PDF","\u002Ftemplates\u002Fpdf","10.templates\u002F03.pdf",{"title":503,"path":504,"stem":505},"System Emails","\u002Ftemplates\u002Fsystem-emails","10.templates\u002F04.system-emails",{"title":507,"icon":508,"path":509,"stem":510,"children":511,"page":62},"Users","i-lucide-users","\u002Fusers","11.users",[512,516,520,524,528],{"title":513,"path":514,"stem":515},"Managing Users","\u002Fusers\u002Fmanaging-users","11.users\u002F01.managing-users",{"title":517,"path":518,"stem":519},"A User's Page","\u002Fusers\u002Fa-users-page","11.users\u002F02.a-users-page",{"title":521,"path":522,"stem":523},"API Tokens","\u002Fusers\u002Fapi-tokens","11.users\u002F03.api-tokens",{"title":525,"path":526,"stem":527},"Sessions","\u002Fusers\u002Fsessions","11.users\u002F04.sessions",{"title":529,"icon":530,"path":531,"stem":532,"children":533,"page":62},"Insights","i-lucide-chart-line","\u002Fusers\u002Finsights","11.users\u002F05.insights",[534,538],{"title":535,"path":536,"stem":537},"Sign-ins","\u002Fusers\u002Finsights\u002Fsign-ins","11.users\u002F05.insights\u002F01.sign-ins",{"title":539,"path":540,"stem":541},"Activity","\u002Fusers\u002Finsights\u002Factivity","11.users\u002F05.insights\u002F02.activity",{"title":543,"icon":544,"path":545,"stem":546,"children":547,"page":62},"Roles","i-lucide-shield-check","\u002Froles","12.roles",[548,552,556,560,564,568,572],{"title":549,"path":550,"stem":551},"Creating a Role","\u002Froles\u002Fcreating-a-role","12.roles\u002F01.creating-a-role",{"title":553,"path":554,"stem":555},"Granting Permissions","\u002Froles\u002Fgranting-permissions","12.roles\u002F02.granting-permissions",{"title":557,"path":558,"stem":559},"Row Filters","\u002Froles\u002Frow-filters","12.roles\u002F03.row-filters",{"title":561,"path":562,"stem":563},"Payload Checks","\u002Froles\u002Fpayload-checks","12.roles\u002F04.payload-checks",{"title":565,"path":566,"stem":567},"Members","\u002Froles\u002Fmembers","12.roles\u002F05.members",{"title":569,"path":570,"stem":571},"Access Reviews","\u002Froles\u002Faccess-reviews","12.roles\u002F06.access-reviews",{"title":573,"path":574,"stem":575},"Delegated Administration","\u002Froles\u002Fdelegated-administration","12.roles\u002F07.delegated-administration",{"title":577,"icon":578,"path":579,"stem":580,"children":581,"page":62},"Logs","i-lucide-scroll-text","\u002Flogs","13.logs",[582,586,590],{"title":583,"path":584,"stem":585},"Audit Log","\u002Flogs\u002Faudit-log","13.logs\u002F01.audit-log",{"title":587,"path":588,"stem":589},"An Entry","\u002Flogs\u002Fan-entry","13.logs\u002F02.an-entry",{"title":591,"path":592,"stem":593},"Where Else It Shows","\u002Flogs\u002Fwhere-else-it-shows","13.logs\u002F03.where-else-it-shows",{"title":595,"icon":596,"path":597,"stem":598,"children":599,"page":62},"Data API","i-lucide-braces","\u002Fdata-api","14.data-api",[600,603,607,611,615,619,623,627,631,635,639,643],{"title":118,"path":601,"stem":602},"\u002Fdata-api\u002Foverview","14.data-api\u002F01.overview",{"title":604,"path":605,"stem":606},"Authentication","\u002Fdata-api\u002Fauthentication","14.data-api\u002F02.authentication",{"title":608,"path":609,"stem":610},"Reading","\u002Fdata-api\u002Freading","14.data-api\u002F03.reading",{"title":612,"path":613,"stem":614},"Filtering","\u002Fdata-api\u002Ffiltering","14.data-api\u002F04.filtering",{"title":616,"path":617,"stem":618},"Aggregating","\u002Fdata-api\u002Faggregating","14.data-api\u002F05.aggregating",{"title":620,"path":621,"stem":622},"Writing","\u002Fdata-api\u002Fwriting","14.data-api\u002F06.writing",{"title":624,"path":625,"stem":626},"Nested Writes","\u002Fdata-api\u002Fnested-writes","14.data-api\u002F07.nested-writes",{"title":628,"path":629,"stem":630},"Transactions","\u002Fdata-api\u002Ftransactions","14.data-api\u002F08.transactions",{"title":632,"path":633,"stem":634},"Calling Functions","\u002Fdata-api\u002Fcalling-functions","14.data-api\u002F09.calling-functions",{"title":636,"path":637,"stem":638},"OpenAPI","\u002Fdata-api\u002Fopenapi","14.data-api\u002F10.openapi",{"title":640,"path":641,"stem":642},"Routes","\u002Fdata-api\u002Froutes","14.data-api\u002F11.routes",{"title":644,"path":645,"stem":646},"A client, end to end","\u002Fdata-api\u002Fa-client","14.data-api\u002F12.a-client",{"title":172,"icon":648,"path":649,"stem":650,"children":651,"page":62},"i-lucide-settings","\u002Fsettings","15.settings",[652,655,659,662,665],{"title":189,"path":653,"stem":654},"\u002Fsettings\u002Fgeneral","15.settings\u002F01.general",{"title":656,"path":657,"stem":658},"Access","\u002Fsettings\u002Faccess","15.settings\u002F02.access",{"title":207,"path":660,"stem":661},"\u002Fsettings\u002Fsecurity","15.settings\u002F03.security",{"title":595,"path":663,"stem":664},"\u002Fsettings\u002Fdata-api","15.settings\u002F04.data-api",{"title":666,"path":667,"stem":668},"Features","\u002Fsettings\u002Ffeatures","15.settings\u002F05.features",{"title":670,"icon":671,"path":672,"stem":673,"children":674,"page":62},"User Profile","i-lucide-circle-user","\u002Fuser-profile","16.user-profile",[675,679,682,686,690],{"title":676,"path":677,"stem":678},"My Account","\u002Fuser-profile\u002Fmy-account","16.user-profile\u002F01.my-account",{"title":525,"path":680,"stem":681},"\u002Fuser-profile\u002Fsessions","16.user-profile\u002F02.sessions",{"title":683,"path":684,"stem":685},"Tokens","\u002Fuser-profile\u002Ftokens","16.user-profile\u002F03.tokens",{"title":687,"path":688,"stem":689},"Preferences","\u002Fuser-profile\u002Fpreferences","16.user-profile\u002F04.preferences",{"title":539,"path":691,"stem":692},"\u002Fuser-profile\u002Factivity","16.user-profile\u002F05.activity",{"title":694,"icon":695,"path":696,"stem":697,"children":698,"page":62},"AI Agents","i-lucide-bot","\u002Fai-agents","17.ai-agents",[699,702,705,709,713,717],{"title":118,"path":700,"stem":701},"\u002Fai-agents\u002Foverview","17.ai-agents\u002F01.overview",{"title":683,"path":703,"stem":704},"\u002Fai-agents\u002Ftokens","17.ai-agents\u002F02.tokens",{"title":706,"path":707,"stem":708},"MCP Server","\u002Fai-agents\u002Fmcp-server","17.ai-agents\u002F03.mcp-server",{"title":710,"path":711,"stem":712},"Recipes","\u002Fai-agents\u002Frecipes","17.ai-agents\u002F04.recipes",{"title":714,"path":715,"stem":716},"Tools","\u002Fai-agents\u002Ftools","17.ai-agents\u002F05.tools",{"title":718,"path":719,"stem":720},"llms.txt","\u002Fai-agents\u002Fllms-txt","17.ai-agents\u002F06.llms-txt",{"title":722,"icon":723,"path":724,"stem":725,"children":726,"page":62},"Operations","i-lucide-server","\u002Foperations","18.operations",[727,731,735,739,743],{"title":728,"path":729,"stem":730},"Deployment","\u002Foperations\u002Fdeployment","18.operations\u002F01.deployment",{"title":732,"path":733,"stem":734},"PostgreSQL","\u002Foperations\u002Fpostgresql","18.operations\u002F02.postgresql",{"title":736,"path":737,"stem":738},"Public URL, Proxy and CORS","\u002Foperations\u002Fpublic-url-proxy-cors","18.operations\u002F03.public-url-proxy-cors",{"title":740,"path":741,"stem":742},"Backup and Restore","\u002Foperations\u002Fbackup-restore","18.operations\u002F04.backup-restore",{"title":744,"path":745,"stem":746},"Upgrading","\u002Foperations\u002Fupgrading","18.operations\u002F05.upgrading",{"title":748,"icon":749,"path":750,"stem":751,"children":752,"page":62},"Reference","i-lucide-library","\u002Freference","19.reference",[753,757,761,765,769],{"title":754,"path":755,"stem":756},"Query Language","\u002Freference\u002Fquery-language","19.reference\u002F01.query-language",{"title":758,"path":759,"stem":760},"Errors","\u002Freference\u002Ferrors","19.reference\u002F02.errors",{"title":762,"path":763,"stem":764},"Admin API","\u002Freference\u002Fadmin-api","19.reference\u002F03.admin-api",{"title":766,"path":767,"stem":768},"Authentication API","\u002Freference\u002Fauth-api","19.reference\u002F04.auth-api",{"title":770,"path":771,"stem":772},"Environment Variables","\u002Freference\u002Fenvironment","19.reference\u002F05.environment",{"id":774,"title":262,"admin":775,"body":776,"description":1857,"extension":1858,"links":1859,"meta":1860,"navigation":1592,"path":263,"seo":1861,"stem":264,"__hash__":1862},"docs\u002F06.dataviews\u002F06.design-form\u002F04.code.md","Design form › Code",{"type":777,"value":778,"toc":1847},"minimark",[779,786,789,794,799,811,1139,1150,1158,1162,1168,1232,1235,1242,1391,1396,1414,1418,1432,1484,1488,1495,1814,1817,1821,1830,1834,1843],[780,781,782,785],"p",{},[783,784,262],"strong",{}," is the page's JavaScript: plain functions that run when something happens, such as a button's click, a record's save, or a Resource loading. Widgets and variables emit events, and each event is wired to a function here.",[780,787,788],{},"Code is for the flow of a page: confirm, save, run a function, open the result, start the next one. Rules about data belong in PostgreSQL, where they apply to every writer.",[790,791],"screenshot",{"caption":792,"id":793},"The Code tab: the Dispatch board's assign handler, with Page events, Insert snippet and Reference in the toolbar.","design-form-code",[795,796,798],"h2",{"id":797},"a-handler","A handler",[780,800,801,802,806,807,810],{},"A handler receives ",[803,804,805],"code",{},"dataview"," and the event, and can be ",[803,808,809],{},"async",":",[812,813,818],"pre",{"className":814,"code":815,"language":816,"meta":817,"style":817},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Button \"Assign\" - click\nasync function onAssignClick(dataview) {\n  const { selectedOrder, technician, assign, unassigned } = dataview.vars\n  if (!selectedOrder.value || !technician.value) {\n    dataview.notify('Pick an order and a technician first', 'warning')\n    return\n  }\n  try {\n    await assign.execute()\n    dataview.notify('Order assigned', 'success')\n    selectedOrder.reset()\n    unassigned.refresh()      \u002F\u002F the table bound to it updates by itself\n  } catch (error) {\n    dataview.notify(`Could not assign: ${error.message}`, 'error')\n  }\n}\n","js","",[803,819,820,829,855,899,940,975,981,987,995,1011,1040,1053,1070,1088,1128,1133],{"__ignoreMap":817},[821,822,825],"span",{"class":823,"line":824},"line",1,[821,826,828],{"class":827},"sHwdD","\u002F\u002F Button \"Assign\" - click\n",[821,830,832,835,838,842,846,849,852],{"class":823,"line":831},2,[821,833,809],{"class":834},"spNyl",[821,836,837],{"class":834}," function",[821,839,841],{"class":840},"s2Zo4"," onAssignClick",[821,843,845],{"class":844},"sMK4o","(",[821,847,805],{"class":848},"sHdIc",[821,850,851],{"class":844},")",[821,853,854],{"class":844}," {\n",[821,856,858,861,864,868,871,874,876,879,881,884,887,890,893,896],{"class":823,"line":857},3,[821,859,860],{"class":834},"  const",[821,862,863],{"class":844}," {",[821,865,867],{"class":866},"sTEyZ"," selectedOrder",[821,869,870],{"class":844},",",[821,872,873],{"class":866}," technician",[821,875,870],{"class":844},[821,877,878],{"class":866}," assign",[821,880,870],{"class":844},[821,882,883],{"class":866}," unassigned",[821,885,886],{"class":844}," }",[821,888,889],{"class":844}," =",[821,891,892],{"class":866}," dataview",[821,894,895],{"class":844},".",[821,897,898],{"class":866},"vars\n",[821,900,902,906,910,913,916,918,921,924,927,930,932,934,937],{"class":823,"line":901},4,[821,903,905],{"class":904},"s7zQu","  if",[821,907,909],{"class":908},"swJcz"," (",[821,911,912],{"class":844},"!",[821,914,915],{"class":866},"selectedOrder",[821,917,895],{"class":844},[821,919,920],{"class":866},"value",[821,922,923],{"class":844}," ||",[821,925,926],{"class":844}," !",[821,928,929],{"class":866},"technician",[821,931,895],{"class":844},[821,933,920],{"class":866},[821,935,936],{"class":908},") ",[821,938,939],{"class":844},"{\n",[821,941,943,946,948,951,953,956,960,962,964,967,970,972],{"class":823,"line":942},5,[821,944,945],{"class":866},"    dataview",[821,947,895],{"class":844},[821,949,950],{"class":840},"notify",[821,952,845],{"class":908},[821,954,955],{"class":844},"'",[821,957,959],{"class":958},"sfazB","Pick an order and a technician first",[821,961,955],{"class":844},[821,963,870],{"class":844},[821,965,966],{"class":844}," '",[821,968,969],{"class":958},"warning",[821,971,955],{"class":844},[821,973,974],{"class":908},")\n",[821,976,978],{"class":823,"line":977},6,[821,979,980],{"class":904},"    return\n",[821,982,984],{"class":823,"line":983},7,[821,985,986],{"class":844},"  }\n",[821,988,990,993],{"class":823,"line":989},8,[821,991,992],{"class":904},"  try",[821,994,854],{"class":844},[821,996,998,1001,1003,1005,1008],{"class":823,"line":997},9,[821,999,1000],{"class":904},"    await",[821,1002,878],{"class":866},[821,1004,895],{"class":844},[821,1006,1007],{"class":840},"execute",[821,1009,1010],{"class":908},"()\n",[821,1012,1014,1016,1018,1020,1022,1024,1027,1029,1031,1033,1036,1038],{"class":823,"line":1013},10,[821,1015,945],{"class":866},[821,1017,895],{"class":844},[821,1019,950],{"class":840},[821,1021,845],{"class":908},[821,1023,955],{"class":844},[821,1025,1026],{"class":958},"Order assigned",[821,1028,955],{"class":844},[821,1030,870],{"class":844},[821,1032,966],{"class":844},[821,1034,1035],{"class":958},"success",[821,1037,955],{"class":844},[821,1039,974],{"class":908},[821,1041,1043,1046,1048,1051],{"class":823,"line":1042},11,[821,1044,1045],{"class":866},"    selectedOrder",[821,1047,895],{"class":844},[821,1049,1050],{"class":840},"reset",[821,1052,1010],{"class":908},[821,1054,1056,1059,1061,1064,1067],{"class":823,"line":1055},12,[821,1057,1058],{"class":866},"    unassigned",[821,1060,895],{"class":844},[821,1062,1063],{"class":840},"refresh",[821,1065,1066],{"class":908},"()      ",[821,1068,1069],{"class":827},"\u002F\u002F the table bound to it updates by itself\n",[821,1071,1073,1076,1079,1081,1084,1086],{"class":823,"line":1072},13,[821,1074,1075],{"class":844},"  }",[821,1077,1078],{"class":904}," catch",[821,1080,909],{"class":908},[821,1082,1083],{"class":866},"error",[821,1085,936],{"class":908},[821,1087,939],{"class":844},[821,1089,1091,1093,1095,1097,1099,1102,1105,1108,1110,1112,1115,1118,1120,1122,1124,1126],{"class":823,"line":1090},14,[821,1092,945],{"class":866},[821,1094,895],{"class":844},[821,1096,950],{"class":840},[821,1098,845],{"class":908},[821,1100,1101],{"class":844},"`",[821,1103,1104],{"class":958},"Could not assign: ",[821,1106,1107],{"class":844},"${",[821,1109,1083],{"class":866},[821,1111,895],{"class":844},[821,1113,1114],{"class":866},"message",[821,1116,1117],{"class":844},"}`",[821,1119,870],{"class":844},[821,1121,966],{"class":844},[821,1123,1083],{"class":958},[821,1125,955],{"class":844},[821,1127,974],{"class":908},[821,1129,1131],{"class":823,"line":1130},15,[821,1132,986],{"class":844},[821,1134,1136],{"class":823,"line":1135},16,[821,1137,1138],{"class":844},"}\n",[780,1140,1141,1142,1145,1146,1149],{},"To wire it, pick the function in the widget's ",[783,1143,1144],{},"Events"," tab, or use ",[783,1147,1148],{},"Create handler"," there to write it.",[780,1151,1152,1153,1157],{},"If a handler throws, the user sees ",[1154,1155,1156],"em",{},"name: message"," and the page keeps working. A syntax error shows at the top of the page.",[795,1159,1161],{"id":1160},"page-events","Page events",[780,1163,1164,1165,1167],{},"The toolbar's ",[783,1166,1161],{}," jumps to, or creates, the functions the page itself calls:",[1169,1170,1171,1183],"table",{},[1172,1173,1174],"thead",{},[1175,1176,1177,1181],"tr",{},[1178,1179,1180],"th",{},"Function",[1178,1182,450],{},[1184,1185,1186,1197,1208,1222],"tbody",{},[1175,1187,1188,1194],{},[1189,1190,1191],"td",{},[803,1192,1193],{},"onLoad",[1189,1195,1196],{},"after the record and the Resources that load at once have loaded",[1175,1198,1199,1205],{},[1189,1200,1201,1202],{},"the record's ",[803,1203,1204],{},"load",[1189,1206,1207],{},"when a record opens",[1175,1209,1210,1215],{},[1189,1211,1201,1212],{},[803,1213,1214],{},"before:save",[1189,1216,1217,1218,1221],{},"before a save; return ",[803,1219,1220],{},"false"," to cancel it",[1175,1223,1224,1229],{},[1189,1225,1201,1226],{},[803,1227,1228],{},"save",[1189,1230,1231],{},"after a successful save",[780,1233,1234],{},"Each generated function starts with a comment saying when it runs, what it receives and what its return value does.",[795,1236,1238,1239,1241],{"id":1237},"what-dataview-holds","What ",[803,1240,805],{}," holds",[1169,1243,1244,1253],{},[1172,1245,1246],{},[1175,1247,1248,1251],{},[1178,1249,1250],{},"Member",[1178,1252],{},[1184,1254,1255,1274,1299,1309,1319,1333,1355,1368,1378],{},[1175,1256,1257,1262],{},[1189,1258,1259],{},[803,1260,1261],{},"vars.\u003Cname>",[1189,1263,1264,1265,1269,1270,1273],{},"the ",[1266,1267,1268],"a",{"href":259},"variables",", ",[803,1271,1272],{},"vars.record"," included",[1175,1275,1276,1281],{},[1189,1277,1278],{},[803,1279,1280],{},"controls.\u003Cname>",[1189,1282,1283,1284,1269,1286,1289,1290,1269,1293,1269,1296,851],{},"named widgets: their state (",[803,1285,920],{},[803,1287,1288],{},"item",") and methods (",[803,1291,1292],{},"open()",[803,1294,1295],{},"focus()",[803,1297,1298],{},"clear()",[1175,1300,1301,1306],{},[1189,1302,1303],{},[803,1304,1305],{},"params",[1189,1307,1308],{},"the page's address parameters",[1175,1310,1311,1316],{},[1189,1312,1313],{},[803,1314,1315],{},"notify(message, color?)",[1189,1317,1318],{},"a message at the corner of the screen",[1175,1320,1321,1326],{},[1189,1322,1323],{},[803,1324,1325],{},"confirm(question)",[1189,1327,1328,1329,1332],{},"the page's own dialog; ",[803,1330,1331],{},"true"," when confirmed",[1175,1334,1335,1352],{},[1189,1336,1337,1269,1340,1269,1343,1269,1346,1269,1349],{},[803,1338,1339],{},"format.number(v, decimals)",[803,1341,1342],{},".currency(v, code)",[803,1344,1345],{},".date(v)",[803,1347,1348],{},".time(v)",[803,1350,1351],{},".datetime(v)",[1189,1353,1354],{},"with the instance's formats and time zone",[1175,1356,1357,1362],{},[1189,1358,1359],{},[803,1360,1361],{},"openDataView(slug, params?, { newTab })",[1189,1363,1364,1365],{},"opens another DataView, a record by ",[803,1366,1367],{},"{ pk }",[1175,1369,1370,1375],{},[1189,1371,1372],{},[803,1373,1374],{},"openFile(result)",[1189,1376,1377],{},"shows a file a Call returned, such as a PDF, to print or download",[1175,1379,1380,1385],{},[1189,1381,1382],{},[803,1383,1384],{},"device.location()",[1189,1386,1387,1388],{},"the device's position, ",[803,1389,1390],{},"{ lng, lat, accuracy }",[780,1392,1393,1395],{},[783,1394,748],{},", in the toolbar, lists all of them with an example to insert.",[780,1397,1398,1399,1402,1403,1406,1407,1410,1411,895],{},"Errors from the API reach your code: a rejected ",[803,1400,1401],{},"execute()"," or ",[803,1404,1405],{},"save()"," carries the API's message, such as a ",[803,1408,1409],{},"CHECK","'s or a function's ",[803,1412,1413],{},"RAISE EXCEPTION",[795,1415,1417],{"id":1416},"snippets","Snippets",[780,1419,1420,1421,1424,1425,1427,1428,1431],{},"A ",[783,1422,1423],{},"snippet"," asks two or three questions and writes plain code: nothing hidden runs at run time, and you can change what it wrote. ",[783,1426,1148],{}," offers them for a new function; ",[783,1429,1430],{},"Insert snippet"," puts one at the cursor. Each shows the code before writing it.",[1169,1433,1434,1443],{},[1172,1435,1436],{},[1175,1437,1438,1441],{},[1178,1439,1440],{},"Group",[1178,1442,1417],{},[1184,1444,1445,1452,1460,1468,1476],{},[1175,1446,1447,1449],{},[1189,1448,193],{},[1189,1450,1451],{},"Run a workflow or function · Refresh data · Filter a Resource by a value · Search a Resource · Use the selected row · Set a variable",[1175,1453,1454,1457],{},[1189,1455,1456],{},"Record",[1189,1458,1459],{},"Save the record (then stay, new or close) · A record action (new, undo, delete, clone, reread) · Set a column of the record",[1175,1461,1462,1465],{},[1189,1463,1464],{},"Controls",[1189,1466,1467],{},"Submit a form · Open or close a modal or slideover · Clear a form's errors · Focus an input",[1175,1469,1470,1473],{},[1189,1471,1472],{},"Navigation",[1189,1474,1475],{},"Open a link · Open another DataView",[1175,1477,1478,1481],{},[1189,1479,1480],{},"Feedback",[1189,1482,1483],{},"Ask for confirmation, then… · Copy to the clipboard · Show a notification",[795,1485,1487],{"id":1486},"a-worked-example-issue-an-invoice","A worked example: issue an invoice",[780,1489,1490,1491,1494],{},"Acme's ",[1154,1492,1493],{},"Quotes"," Master-detail ends with a button that saves the quote, issues its invoice with a function, opens the PDF and starts the next quote:",[812,1496,1498],{"className":814,"code":1497,"language":816,"meta":817,"style":817},"async function onIssueClick(dataview) {\n  const { record, issue } = dataview.vars\n  const total = dataview.format.currency(record.data.total, 'ARS')\n\n  if (!await dataview.confirm(`Total: ${total}\\nIssue the invoice?`)) return\n  if (!await record.save()) return          \u002F\u002F PostgreSQL said no: the form shows why\n\n  try {\n    const pdf = await issue.execute({ data: { p_quote: record.pk } })\n    dataview.openFile(pdf)\n    record.new()\n  } catch (error) {\n    dataview.notify(`Could not issue it: ${error.message}. The quote is saved.`, 'error')\n  }\n}\n",[803,1499,1500,1517,1541,1588,1594,1640,1665,1669,1675,1724,1740,1752,1766,1806,1810],{"__ignoreMap":817},[821,1501,1502,1504,1506,1509,1511,1513,1515],{"class":823,"line":824},[821,1503,809],{"class":834},[821,1505,837],{"class":834},[821,1507,1508],{"class":840}," onIssueClick",[821,1510,845],{"class":844},[821,1512,805],{"class":848},[821,1514,851],{"class":844},[821,1516,854],{"class":844},[821,1518,1519,1521,1523,1526,1528,1531,1533,1535,1537,1539],{"class":823,"line":831},[821,1520,860],{"class":834},[821,1522,863],{"class":844},[821,1524,1525],{"class":866}," record",[821,1527,870],{"class":844},[821,1529,1530],{"class":866}," issue",[821,1532,886],{"class":844},[821,1534,889],{"class":844},[821,1536,892],{"class":866},[821,1538,895],{"class":844},[821,1540,898],{"class":866},[821,1542,1543,1545,1548,1550,1552,1554,1557,1559,1562,1564,1567,1569,1572,1574,1577,1579,1581,1584,1586],{"class":823,"line":857},[821,1544,860],{"class":834},[821,1546,1547],{"class":866}," total",[821,1549,889],{"class":844},[821,1551,892],{"class":866},[821,1553,895],{"class":844},[821,1555,1556],{"class":866},"format",[821,1558,895],{"class":844},[821,1560,1561],{"class":840},"currency",[821,1563,845],{"class":908},[821,1565,1566],{"class":866},"record",[821,1568,895],{"class":844},[821,1570,1571],{"class":866},"data",[821,1573,895],{"class":844},[821,1575,1576],{"class":866},"total",[821,1578,870],{"class":844},[821,1580,966],{"class":844},[821,1582,1583],{"class":958},"ARS",[821,1585,955],{"class":844},[821,1587,974],{"class":908},[821,1589,1590],{"class":823,"line":901},[821,1591,1593],{"emptyLinePlaceholder":1592},true,"\n",[821,1595,1596,1598,1600,1602,1605,1607,1609,1612,1614,1616,1619,1621,1623,1626,1629,1632,1634,1637],{"class":823,"line":942},[821,1597,905],{"class":904},[821,1599,909],{"class":908},[821,1601,912],{"class":844},[821,1603,1604],{"class":904},"await",[821,1606,892],{"class":866},[821,1608,895],{"class":844},[821,1610,1611],{"class":840},"confirm",[821,1613,845],{"class":908},[821,1615,1101],{"class":844},[821,1617,1618],{"class":958},"Total: ",[821,1620,1107],{"class":844},[821,1622,1576],{"class":866},[821,1624,1625],{"class":844},"}",[821,1627,1628],{"class":866},"\\n",[821,1630,1631],{"class":958},"Issue the invoice?",[821,1633,1101],{"class":844},[821,1635,1636],{"class":908},")) ",[821,1638,1639],{"class":904},"return\n",[821,1641,1642,1644,1646,1648,1650,1652,1654,1656,1659,1662],{"class":823,"line":977},[821,1643,905],{"class":904},[821,1645,909],{"class":908},[821,1647,912],{"class":844},[821,1649,1604],{"class":904},[821,1651,1525],{"class":866},[821,1653,895],{"class":844},[821,1655,1228],{"class":840},[821,1657,1658],{"class":908},"()) ",[821,1660,1661],{"class":904},"return",[821,1663,1664],{"class":827},"          \u002F\u002F PostgreSQL said no: the form shows why\n",[821,1666,1667],{"class":823,"line":983},[821,1668,1593],{"emptyLinePlaceholder":1592},[821,1670,1671,1673],{"class":823,"line":989},[821,1672,992],{"class":904},[821,1674,854],{"class":844},[821,1676,1677,1680,1683,1685,1688,1690,1692,1694,1696,1699,1702,1704,1706,1709,1711,1713,1715,1718,1720,1722],{"class":823,"line":997},[821,1678,1679],{"class":834},"    const",[821,1681,1682],{"class":866}," pdf",[821,1684,889],{"class":844},[821,1686,1687],{"class":904}," await",[821,1689,1530],{"class":866},[821,1691,895],{"class":844},[821,1693,1007],{"class":840},[821,1695,845],{"class":908},[821,1697,1698],{"class":844},"{",[821,1700,1701],{"class":908}," data",[821,1703,810],{"class":844},[821,1705,863],{"class":844},[821,1707,1708],{"class":908}," p_quote",[821,1710,810],{"class":844},[821,1712,1525],{"class":866},[821,1714,895],{"class":844},[821,1716,1717],{"class":866},"pk",[821,1719,886],{"class":844},[821,1721,886],{"class":844},[821,1723,974],{"class":908},[821,1725,1726,1728,1730,1733,1735,1738],{"class":823,"line":1013},[821,1727,945],{"class":866},[821,1729,895],{"class":844},[821,1731,1732],{"class":840},"openFile",[821,1734,845],{"class":908},[821,1736,1737],{"class":866},"pdf",[821,1739,974],{"class":908},[821,1741,1742,1745,1747,1750],{"class":823,"line":1042},[821,1743,1744],{"class":866},"    record",[821,1746,895],{"class":844},[821,1748,1749],{"class":840},"new",[821,1751,1010],{"class":908},[821,1753,1754,1756,1758,1760,1762,1764],{"class":823,"line":1055},[821,1755,1075],{"class":844},[821,1757,1078],{"class":904},[821,1759,909],{"class":908},[821,1761,1083],{"class":866},[821,1763,936],{"class":908},[821,1765,939],{"class":844},[821,1767,1768,1770,1772,1774,1776,1778,1781,1783,1785,1787,1789,1791,1794,1796,1798,1800,1802,1804],{"class":823,"line":1072},[821,1769,945],{"class":866},[821,1771,895],{"class":844},[821,1773,950],{"class":840},[821,1775,845],{"class":908},[821,1777,1101],{"class":844},[821,1779,1780],{"class":958},"Could not issue it: ",[821,1782,1107],{"class":844},[821,1784,1083],{"class":866},[821,1786,895],{"class":844},[821,1788,1114],{"class":866},[821,1790,1625],{"class":844},[821,1792,1793],{"class":958},". The quote is saved.",[821,1795,1101],{"class":844},[821,1797,870],{"class":844},[821,1799,966],{"class":844},[821,1801,1083],{"class":958},[821,1803,955],{"class":844},[821,1805,974],{"class":908},[821,1807,1808],{"class":823,"line":1090},[821,1809,986],{"class":844},[821,1811,1812],{"class":823,"line":1130},[821,1813,1138],{"class":844},[780,1815,1816],{},"Confirming first, keeping the quote when issuing fails and starting the next one are readable lines anyone can change, not options of a special button.",[795,1818,1820],{"id":1819},"code-isnt-security","Code isn't security",[780,1822,1823,1824,1826,1827,895],{},"Code runs in the user's browser. It decides what the page does, not what the user may do: every read and write still goes through the Data API with the user's permissions. A check that must hold belongs in PostgreSQL, as a ",[803,1825,1409],{},", a trigger or a function, or in a role's ",[1266,1828,1829],{"href":562},"payload checks",[795,1831,1833],{"id":1832},"next-steps","Next steps",[1835,1836,1837],"ul",{},[1838,1839,1840,1842],"li",{},[1266,1841,266],{"href":267},": computed values without code.",[1844,1845,1846],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":817,"searchDepth":824,"depth":831,"links":1848},[1849,1850,1851,1853,1854,1855,1856],{"id":797,"depth":831,"text":798},{"id":1160,"depth":831,"text":1161},{"id":1237,"depth":831,"text":1852},"What dataview holds",{"id":1416,"depth":831,"text":1417},{"id":1486,"depth":831,"text":1487},{"id":1819,"depth":831,"text":1820},{"id":1832,"depth":831,"text":1833},"The page's handlers: what happens when a widget or a variable emits an event.","md",null,{},{"title":262,"description":1857},"7MNk1Uc8bhtALTJ0959g1otWhHAV1sbYGvOqvBS1ZDc",[1864,1866],{"title":258,"path":259,"stem":260,"description":1865,"children":-1},"The page's state, data and calls: Value, Resource, Call and the record.",{"title":266,"path":267,"stem":268,"description":1867,"children":-1},"Computed values over a row or the page: card titles, colors, labels, visibility.",1792339962842]