Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/.well-known/agent-skills/fliplet-js-api/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ The Fliplet client-side JavaScript API: every Fliplet.X namespace (Storage, User
- [Fliplet.UI.Typeahead()](https://developers.fliplet.com/API/fliplet-ui-typeahead.md): Render a typeahead input with real-time suggestions, free-input toggle, max items, and get/set/change methods via Fliplet.UI.Typeahead.
- [Fliplet.UI](https://developers.fliplet.com/API/fliplet-ui.md): Fliplet-managed UI primitives — toasts, action sheets, modals, date/time pickers, typeahead, tables, panzoom — under the Fliplet.UI namespace.
- [Using Handlebars in your apps](https://developers.fliplet.com/API/libraries/handlebars.md): Use Handlebars 2.15.2 in Fliplet app screens for templating, with built-in helpers for images, dates, auth URLs, JSON, and conditional comparisons.
- [Fliplet.LikeButton](https://developers.fliplet.com/API/like-buttons.md): Embed a one-tap like button on any screen element, backed by a Data Source that records likes per content ID.
- [LikeButton](https://developers.fliplet.com/API/like-buttons.md): Embed a one-tap like button on any screen element, backed by a Data Source that records likes per content ID.
- [Data Source provider](https://developers.fliplet.com/API/providers/data-source.md): The Data Source provider lets users pick or create a data source for a component, including default columns, entries, and access rules.
- [Email provider](https://developers.fliplet.com/API/providers/email.md): Compose email templates (subject, body, recipients, headers) in a reusable provider UI for sending via `Fliplet.Communicate.sendEmail()`.
- [File Picker provider](https://developers.fliplet.com/API/providers/file-picker.md): The File Picker provider lets users select one or more files from Fliplet's File Manager, optionally scoped by file type or restricted to single-select.
Expand Down
2 changes: 1 addition & 1 deletion docs/.well-known/agent-skills/index.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
"tags": [
"js-api"
],
"sha256": "7d2ee408458c7970f50f21310b0be09aba835bb86c8eeca41a6227bbc4c89530"
"sha256": "bb692fdaa34a840151f962f902a83e7902691c961add1d46ea361bb51545e0ce"
},
{
"name": "fliplet-docs-index",
Expand Down
443 changes: 306 additions & 137 deletions docs/.well-known/llms-full.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/.well-known/llms-v3-libraries.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 1,
"generatedAt": "2026-06-17T10:20:55.308Z",
"generatedAt": "2026-06-30T13:06:01.506Z",
"libraries": [
{
"package": "fliplet-analytics-spa",
Expand Down
2 changes: 1 addition & 1 deletion docs/.well-known/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
- [Fliplet.UI.Toast()](https://developers.fliplet.com/API/fliplet-ui-toast.md): Show minimal or regular auto-dismissing toast notifications with title, message, position, duration, progress bar, and action buttons via Fliplet.UI.Toast.
- [Fliplet.UI.Typeahead()](https://developers.fliplet.com/API/fliplet-ui-typeahead.md): Render a typeahead input with real-time suggestions, free-input toggle, max items, and get/set/change methods via Fliplet.UI.Typeahead.
- [Fliplet.UI](https://developers.fliplet.com/API/fliplet-ui.md): Fliplet-managed UI primitives — toasts, action sheets, modals, date/time pickers, typeahead, tables, panzoom — under the Fliplet.UI namespace.
- [Fliplet.LikeButton](https://developers.fliplet.com/API/like-buttons.md): Embed a one-tap like button on any screen element, backed by a Data Source that records likes per content ID.
- [LikeButton](https://developers.fliplet.com/API/like-buttons.md): Embed a one-tap like button on any screen element, backed by a Data Source that records likes per content ID.
- [V3 app analytics and event tracking](https://developers.fliplet.com/API/v3/analytics.md): V3 app analytics and event tracking. Page views are tracked automatically by the fliplet-analytics-spa runtime; this doc covers what you get for free and when to add event() calls for intent-bearing…
- [V3 app bootstrap constraints](https://developers.fliplet.com/API/v3/app-bootstrap.md): The four constraints every V3 boot HTML must satisfy. Covers Fliplet.require.lazy for dependencies, Fliplet.Media.getContents for source files, the Fliplet().then(...) init sequence, and the locked v…
- [V3 App Settings Convention](https://developers.fliplet.com/API/v3/app-settings.md): V3 app settings convention for storing public and private configuration. Covers the underscore prefix convention for editor-private settings.
Expand Down
2 changes: 1 addition & 1 deletion docs/API/components/chat.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ const guid = _.get(conversation, 'definition.metadata.guid');
As an example, you can use the metadata to store the ID of a record in a data source that is related to the conversation and use it to find the conversation later on:

```js
const conversations = await conversations.get();
const conversations = await chat.conversations();

const myConversation = _.find(conversations, c => _.get(c, 'definition.metadata.guid') === 'running-team'));
```
Expand Down
40 changes: 3 additions & 37 deletions docs/API/components/dynamic-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The following JS APIs are available in a screen once a **Dynamic container** com

## Retrieve an instance

Since you can have many dynamic containers in a screen, we provide a handy function to grab a specific instance by its name or the first one available in the page when no input parameter is given.
Since you can have many dynamic containers in a screen, we provide a handy function to grab a specific instance by its id or the first one available in the page when no input parameter is given.

### `Fliplet.DynamicContainer.get()`

Expand All @@ -45,8 +45,8 @@ Fliplet.DynamicContainer.get()
// Use container to perform various actions
});

// Gets the first dynamic container instance named 'foo'
Fliplet.DynamicContainer.get('foo')
// Gets the dynamic container instance with id 123
Fliplet.DynamicContainer.get(123)
.then(function (container) {
// Use container to perform various actions
});
Expand All @@ -68,40 +68,6 @@ Fliplet.DynamicContainer.getAll().then(function (containers) {

## Instance methods

### `container.load()`

Use the `load` function to populate the dynamic container context with an array or an object:

```js
Fliplet.DynamicContainer.get().then(function (container) {
container.load(function () {
return [
{ Name: 'Bob' },
{ Name: 'Alice' }
];
});
});
```

You can also return a `Promise` if you're loading the data asynchronously. In the following example we are populating a container with entries from a Fliplet data source:

```js
Fliplet.DynamicContainer.get().then(function (container) {
container.load(function () {
return Fliplet.DataSources.connect(123).then(function (connection) {
return connection.findWithCursor({
where: { Office: 'London' },
limit: 10
});
});
});
});
```

Note that we used the [findWithCursor](/API/fliplet-datasources#fetch-all-records-from-a-data-source) method instead of `find` to let the system manage pagination when the data is displayed in a list repeater.

For more details, check the JS API documentation for the [findWithCursor](/API/fliplet-datasources#fetch-all-records-from-a-data-source) method.

### `container.connection()`

Use the `connection` function to load the data source connection object.
Expand Down
3 changes: 1 addition & 2 deletions docs/API/components/list-repeater.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ The `container` instance variable above is a `Vue` compatible instance with the

- `direction`: `vertical` or `horizontal`
- `rows`: `Array` from the parent context
- `el`: DOM Element
- `template`: the list row template
- `element`: DOM Element

---

Expand Down
19 changes: 11 additions & 8 deletions docs/API/components/record-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,15 @@ Fliplet.RecordContainer.get('foo')
});
```

The `container` instance variable above is a `Vue` compatible instance with the following properties available:
The `container` instance variable above has the following properties available:

- `direction`: `vertical` or `horizontal`
- `rows`: `Array` from the parent context
- `el`: DOM Element
- `template`: the list row template
- `element`: DOM Element
- `id`: the component instance id
- `name`: the component instance name
- `entry`: the data source entry loaded by the container
- `data`: the component instance data
- `dataSourceId`: the data source id used for the connection
- `parent`: the parent context

---

Expand All @@ -86,11 +89,11 @@ Attributes returned in the `options` object:

- `container`: the container element
- `entry`: the data source entry
- `vm`: the Vue instance of the widget
- `instance`: the record container instance

```js
Fliplet.Hooks.on('recordContainerDataRetrieved', function(options) {
// options contains "container", "entry" and "vm"
// options contains "container", "entry" and "instance"
});
```

Expand All @@ -104,7 +107,7 @@ Attributes returned in the `options` object:

- `container`: the container element
- `connection`: the data source connection
- `vm`: the Vue instance of the widget
- `instance`: the record container instance
- `dataSourceId`: the data source id used for the connection
- `dataSourceEntryId`: the data source entry id to be loaded

Expand Down
2 changes: 1 addition & 1 deletion docs/API/core/app-actions-v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ The following example creates an action that is triggered when a log entry is cr
```js
Fliplet.App.Actions.create({
name: 'send-email-on-error',
environment:'server'
environment:'server',
triggers: [
{
trigger: 'log',
Expand Down
7 changes: 4 additions & 3 deletions docs/API/core/biometrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ Use the `Fliplet.User.Biometrics.isAvailable()` method to check whether biometri

The available types are:

- `face` iOS and Android
- `finger` Android only
- `touch` iOS only
- `face` all platforms
- `finger` Android up to SDK 9
- `biometric` Android from SDK 9 upwards
- `touch` iOS

```js
Fliplet.User.Biometrics.isAvailable().then(function (type) {
Expand Down
10 changes: 5 additions & 5 deletions docs/API/core/organizations.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ Like the Audit logs endpoint, this uses POST despite being a read operation —
### Get the current organization settings

```js
Fliplet.Organization.Settings.getAll()
Fliplet.Organizations.Settings.getAll()
.then(function (settings) {
// Your code
});
Expand All @@ -106,7 +106,7 @@ Fliplet.Organization.Settings.getAll()
### Extend the current settings

```js
Fliplet.Organization.Settings.set({
Fliplet.Organizations.Settings.set({
user: 'foo',
_password: 'bar' // Settings with an underscore prefix "_" will be encrypted
})
Expand All @@ -118,7 +118,7 @@ Fliplet.Organization.Settings.set({
### Get a setting

```js
Fliplet.Organization.Settings.get('foo')
Fliplet.Organizations.Settings.get('foo')
.then(function (value) {
// Your code
})
Expand All @@ -127,7 +127,7 @@ Fliplet.Organization.Settings.get('foo')
### Check if a setting is set

```js
Fliplet.Organization.Settings.isSet('_password')
Fliplet.Organizations.Settings.isSet('_password')
.then(function(isSet) {
if (isSet) {
// Your code
Expand All @@ -138,7 +138,7 @@ Fliplet.Organization.Settings.isSet('_password')
### Unset a setting

```js
Fliplet.Organization.Settings.unset(['user','_password'])
Fliplet.Organizations.Settings.unset(['user','_password'])
.then(function (currentSettings) {
// Your code
})
Expand Down
8 changes: 5 additions & 3 deletions docs/API/fliplet-content.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,11 @@ Fliplet.Content({dataSourceId: 2}).then(function (content) {
```js
Fliplet.Content({dataSourceId: 2}).then(function (content) {
content.query({
content: {
pageId: 3282,
dataSourceEntryId: 5234,
where: {
content: {
pageId: 3282,
dataSourceEntryId: 5234,
}
}
}).then(function(rows){
rows; // returns all the data source entries related to the specified content
Expand Down
8 changes: 4 additions & 4 deletions docs/API/fliplet-csv.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ The CSV JS API uses [Papa Parse](https://www.papaparse.com/) as the underlying e
```js
// Specifying a collection of entries
Fliplet.CSV.encode([
{ 'Column 1', 'foo', 'Column 2': 'bar' },
{ 'Column 1', 'abc', 'Column 2': 'def' }
{ 'Column 1': 'foo', 'Column 2': 'bar' },
{ 'Column 1': 'abc', 'Column 2': 'def' }
]);

// Pick specific columns from a collection of entries
Fliplet.CSV.encode([
{ 'Column 1', 'foo', 'Column 2': 'bar', 'Column 3': 'baz' },
{ 'Column 1', 'abc', 'Column 2': 'def', 'Column 3': 'ghi' }
{ 'Column 1': 'foo', 'Column 2': 'bar', 'Column 3': 'baz' },
{ 'Column 1': 'abc', 'Column 2': 'def', 'Column 3': 'ghi' }
], {
columns: ['Column 3', 'Column 1'] // Show only the specified columns, in given order
});
Expand Down
18 changes: 9 additions & 9 deletions docs/API/fliplet-datasources.md
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ formData.append('Office', 'San Francisco');
formData.append('Avatar', newAvatarFile);

const updatedUser = await connection.update(456, formData, {
mediaFolderId: 789
folderId: 789
});
console.log('Updated user with new avatar:', updatedUser);
```
Expand Down Expand Up @@ -382,11 +382,11 @@ if (users.length > 0) {

// Complete example: Remove multiple users matching criteria
const connection = await Fliplet.DataSources.connectByName("Users");
const deletedCount = await connection.query({
const deletedEntries = await connection.query({
type: 'delete',
where: { Status: 'Inactive' }
});
console.log(`Removed ${deletedCount} inactive users`);
console.log('Removed inactive users:', deletedEntries);
```

---
Expand Down Expand Up @@ -667,17 +667,17 @@ const connection = await Fliplet.DataSources.connectByName("Users");
const subscription = connection.subscribe({
events: ['insert', 'update', 'delete'] // Which events to listen for
}, (changes) => {
if (changes.inserted.length) {
if (changes.inserted?.length) {
console.log('New users added:', changes.inserted);
// Update your UI to show new users
}

if (changes.updated.length) {
if (changes.updated?.length) {
console.log('Users updated:', changes.updated);
// Update your UI to reflect changes
}

if (changes.deleted.length) {
if (changes.deleted?.length) {
console.log('Users deleted:', changes.deleted);
// Remove users from your UI
}
Expand Down Expand Up @@ -1224,21 +1224,21 @@ const setupRealTimeUpdates = (connection, cursor) => {
}, (changes) => {
const { inserted, updated, deleted } = changes;

if (inserted.length) {
if (inserted?.length) {
console.log(`\n🆕 ${inserted.length} new user(s) added:`);
inserted.forEach(user => {
console.log(` + ${user.data.Name} (${user.data.Email})`);
});
}

if (updated.length) {
if (updated?.length) {
console.log(`\n✏️ ${updated.length} user(s) updated:`);
updated.forEach(user => {
console.log(` ~ ${user.data.Name} (${user.data.Email})`);
});
}

if (deleted.length) {
if (deleted?.length) {
console.log(`\n🗑️ ${deleted.length} user(s) deleted`);
}

Expand Down
4 changes: 2 additions & 2 deletions docs/API/fliplet-encryption.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ Fliplet.DataSources.Encryption().setRuntimeKey('foo');
Use the `getKey` JS API to fetch the encryption key from the current session or the device storage:

```js
Fliplet.DataSources.Encryption().getKey().then(function (obj) {
// obj.key
Fliplet.DataSources.Encryption().getKey().then(function (key) {
// key is the encryption key
});
```

Expand Down
2 changes: 1 addition & 1 deletion docs/API/fliplet-gamify.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Achievements are used to track specific milestones that users have reached. They

## Usage

To start setting up gamification logic for your app, add `fliplet-like:0.1` to your app/page dependencies.
To start setting up gamification logic for your app, add `fliplet-gamify:0.1` to your app/page dependencies.

Users must be logged in to use game engine and store game data.

Expand Down
4 changes: 2 additions & 2 deletions docs/API/fliplet-notifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ Notifications can be removed through the following method. Note that push notifi

```js
// remove a notification by id
notification.remove(1).then(function () {
instance.remove(1).then(function () {

})
```
Expand Down Expand Up @@ -464,7 +464,7 @@ instance.update(1, {
})

// remove a notification by id
notification.remove(1)
instance.remove(1)

// subscribe to notifications
// each message contains id, createdAt, updatedAt, data, isUpdate, isDeleted, isFirstBatch
Expand Down
4 changes: 2 additions & 2 deletions docs/API/fliplet-oauth2.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Fliplet.OAuth2(service).api(path)
```js
Fliplet.OAuth2.configure('github', {
authUrl: 'http://github.com/login/oauth/authorize', // from OAuth2 service provider
grantType: 'implicit', // as supported by OAuth2 service provider
grantType: 'token', // as supported by OAuth2 service provider
grantUrl: 'https://github.com/login/oauth/access_token', // from OAuth2 service provider
baseUrl: 'https://api.github.com/', // from OAuth2 service provider
clientId: 'uztcbv3bwtkxmmej1lxv', // from OAuth2 service provider
Expand Down Expand Up @@ -83,7 +83,7 @@ Cross-Origin Request Sharing (CORS) sometimes needs to be configured with the se

### `Fliplet.OAuth2.configure()`

(Returns **`null`**)
(Returns the `Fliplet.OAuth2` instance when configuring a service, or the requested service configuration(s) when called to read)

Configure an OAuth2 service or multiple OAuth2 services.

Expand Down
Loading
Loading