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
15 changes: 15 additions & 0 deletions docs-mintlify/admin/users-and-permissions/manage-users.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,21 @@ You cannot delete your own account. Deleting a user is irreversible.

</Warning>

## User preferences

Each user can customize their Cube Cloud experience through the
**Preferences** page, accessible from the user menu. These settings are
saved to the user's account and apply across all devices.

| Preference | Description | Default |
| --- | --- | --- |
| Theme | Choose between System, Light, or Dark visual theme | System |
| Sidebar drawer | Show only icons and expand the sidebar on hover | Off |
| Pointer cursors | Use pointer cursors on interactive elements | On |
| Code editor | Switch to the new CodeMirror-based code editor for data models | Off |
| New message scrolling | Automatically scroll to new messages in chat | On |
| Alternating row colors | Highlight alternating rows in data tables | Off |

## Provisioning users via SCIM

If your organization uses an identity provider such as [Okta][ref-okta] or
Expand Down
85 changes: 85 additions & 0 deletions docs-mintlify/cube-tracking.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
(function () {
var COOKIE_NAME = 'cubedev_anonymous';
var MAX_AGE = 365 * 24 * 60 * 60;
var TRACK_URL = 'https://track.cube.dev/track';
var IDENTITY_URL = 'https://identity.cube.dev';

function getCookie(name) {
var match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
return match ? decodeURIComponent(match[1]) : null;
}

function setCookie(name, value, maxAge, domain) {
var cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
'; max-age=' + maxAge + '; path=/; SameSite=Lax';
if (domain) cookie += '; domain=' + domain;
document.cookie = cookie;
}

function getTopDomain() {
var parts = location.hostname.split('.');
if (parts.length <= 1) return location.hostname;
for (var i = parts.length - 2; i >= 0; i--) {
var candidate = parts.slice(i).join('.');
setCookie('__tld__', '1', 10, '.' + candidate);
if (getCookie('__tld__')) {
setCookie('__tld__', '', -1, '.' + candidate);
return candidate;
}
}
return location.hostname;
}

function newUUID() {
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
return crypto.randomUUID();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (Math.random() * 16) | 0;
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
});
}

function getAnonymousId(domain, callback) {
var existing = getCookie(COOKIE_NAME);
if (existing) return callback(existing);

fetch(IDENTITY_URL, { credentials: 'include' })
.then(function (r) { return r.status < 400 ? r.text() : Promise.reject(); })
.catch(function () { return newUUID(); })
.then(function (id) {
setCookie(COOKIE_NAME, id, MAX_AGE, domain ? '.' + domain : null);
callback(id);
});
}

function trackPage() {
var topDomain = getTopDomain();
getAnonymousId(topDomain, function (anonymousId) {
var payload = [{
event: 'page',
href: location.href,
pathname: location.pathname,
search: location.search,
hash: location.hash,
referrer: document.referrer,
id: newUUID(),
clientAnonymousId: anonymousId,
clientTimestamp: new Date().toJSON(),
sentAt: new Date().toJSON(),
}];

fetch(TRACK_URL, {
method: 'POST',
body: JSON.stringify(payload),
headers: { 'Content-Type': 'application/json' },
}).catch(function () {});
});
}

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', trackPage);
} else {
trackPage();
}
})();
9 changes: 7 additions & 2 deletions docs-mintlify/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"theme": "mint",
"name": "Cube Documentation",
"colors": {
"primary": "#7A77FF",
"primary": "#5339CF",
"light": "#A5A3FF",
"dark": "#5856D6"
"dark": "#716EEE"
},
"favicon": "/favicon.svg",
"banner": {
Expand Down Expand Up @@ -598,6 +598,11 @@
}
]
},
"integrations": {
"gtm": {
"tagId": "GTM-52W7VM2"
}
},
"styling": {
"codeblocks": "dark"
},
Expand Down
9 changes: 4 additions & 5 deletions packages/cubejs-backend-native/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 4 additions & 5 deletions rust/cubeorchestrator/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion rust/cubeorchestrator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ serde_json = "1.0.133"
anyhow = "1.0"
itertools = "0.13.0"
indexmap = { version = "2.0", features = ["serde"] }
flatbuffers = "23.5.26"

[dependencies.neon]
version = "=1"
Expand Down
6 changes: 3 additions & 3 deletions rust/cubeorchestrator/src/query_message_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::{
transport::JsRawData,
};
use cubeshared::codegen::{root_as_http_message_with_opts, HttpCommand};
use flatbuffers::VerifierOptions;
use cubeshared::flatbuffers::VerifierOptions;
use indexmap::IndexMap;
use neon::prelude::Finalize;

Expand Down Expand Up @@ -158,7 +158,7 @@ mod tests {
root_as_http_message_unchecked, HttpColumnValue, HttpColumnValueArgs, HttpCommand,
HttpMessage, HttpMessageArgs, HttpResultSet, HttpResultSetArgs, HttpRow, HttpRowArgs,
};
use flatbuffers::FlatBufferBuilder;
use cubeshared::flatbuffers::FlatBufferBuilder;

/// Helper function to create a test HttpMessage with a given number of rows and columns
fn create_test_message(num_rows: usize, num_columns: usize) -> Vec<u8> {
Expand Down Expand Up @@ -320,7 +320,7 @@ mod tests {
#[test]
fn test_parse_with_custom_verifier_options() {
use cubeshared::codegen::root_as_http_message_with_opts;
use flatbuffers::VerifierOptions;
use cubeshared::flatbuffers::VerifierOptions;

// Test that custom verifier options can handle large datasets
let msg_data = create_test_message(33_000, 40);
Expand Down
10 changes: 5 additions & 5 deletions rust/cubeshared/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rust/cubeshared/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ version = "0.1.0"
edition = "2021"

[dependencies]
flatbuffers = "23.1.21"
flatbuffers = "25.12.19"
Loading
Loading