@tula-tech/contract 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ // src/organization-permissions.ts
2
+ var MAX_PERMISSIONS_PER_ROLE2 = 32;
3
+ var MAX_CUSTOM_ROLES2 = 50;
4
+ var MAX_PERMISSION_KEY_LENGTH2 = 100;
5
+ var ROLE_KEY_PATTERN2 = /^[a-z][a-z0-9_]{0,31}$/;
6
+ var PERMISSION_KEY_PATTERN2 = /^org:(?:sys:[a-z][a-z0-9_]{0,31}|(?!sys:)[a-z][a-z0-9_]{0,31}):[a-z][a-z0-9_]{0,31}$/;
7
+ var SYSTEM_PERMISSIONS2 = [
8
+ "org:sys:organization:manage",
9
+ "org:sys:organization:delete",
10
+ "org:sys:memberships:read",
11
+ "org:sys:memberships:manage",
12
+ "org:sys:invitations:manage",
13
+ "org:sys:domains:manage",
14
+ "org:sys:sso:manage"
15
+ ];
16
+ var MEMBERSHIPS_MANAGE_PERMISSION2 = "org:sys:memberships:manage";
17
+ var DOMAINS_MANAGE_PERMISSION2 = "org:sys:domains:manage";
18
+ var INVITATIONS_MANAGE_PERMISSION2 = "org:sys:invitations:manage";
19
+ var ORGANIZATION_MANAGE_PERMISSION2 = "org:sys:organization:manage";
20
+ var ORGANIZATION_DELETE_PERMISSION2 = "org:sys:organization:delete";
21
+ var MEMBERSHIPS_READ_PERMISSION2 = "org:sys:memberships:read";
22
+ var SSO_MANAGE_PERMISSION2 = "org:sys:sso:manage";
23
+ var BUILT_IN_ROLES2 = [
24
+ { key: "admin", name: "Admin", permissions: SYSTEM_PERMISSIONS2 },
25
+ { key: "member", name: "Member", permissions: ["org:sys:memberships:read"] }
26
+ ];
27
+ function isSystemPermission2(key) {
28
+ return SYSTEM_PERMISSIONS2.includes(key);
29
+ }
30
+ function isBuiltInRoleKey2(key) {
31
+ return BUILT_IN_ROLES2.some((role) => role.key === key);
32
+ }
33
+ function rolePermissionRefusal2(key) {
34
+ if (key.length > MAX_PERMISSION_KEY_LENGTH2 || !PERMISSION_KEY_PATTERN2.test(key)) {
35
+ return "grammar";
36
+ }
37
+ return key.startsWith("org:sys:") && !isSystemPermission2(key) ? "reserved" : null;
38
+ }
39
+ function normalizePermissions2(permissions) {
40
+ return [...new Set(permissions)].sort();
41
+ }
42
+ function organizationRoleWeakenings2(before, after) {
43
+ if (before === null) {
44
+ return [];
45
+ }
46
+ const had = new Set(before);
47
+ return after.some((key) => !had.has(key)) ? ["permissions"] : [];
48
+ }
49
+
50
+ export { MAX_PERMISSIONS_PER_ROLE2, MAX_CUSTOM_ROLES2, MAX_PERMISSION_KEY_LENGTH2, ROLE_KEY_PATTERN2, PERMISSION_KEY_PATTERN2, SYSTEM_PERMISSIONS2, MEMBERSHIPS_MANAGE_PERMISSION2, DOMAINS_MANAGE_PERMISSION2, INVITATIONS_MANAGE_PERMISSION2, ORGANIZATION_MANAGE_PERMISSION2, ORGANIZATION_DELETE_PERMISSION2, MEMBERSHIPS_READ_PERMISSION2, SSO_MANAGE_PERMISSION2, BUILT_IN_ROLES2, isSystemPermission2, isBuiltInRoleKey2, rolePermissionRefusal2, normalizePermissions2, organizationRoleWeakenings2 };
package/dist/theme.d.ts CHANGED
@@ -133,13 +133,16 @@ interface ThemeTokenDefinition {
133
133
  */
134
134
  declare const THEME_TOKENS: readonly ThemeTokenDefinition[];
135
135
  /**
136
- * The default theme. Every text colour has a contrast of at least 4.5:1 on the backgrounds it
136
+ * The default theme: Tula's own, "ink and paper". Warm neutrals from the brand kit (ink
137
+ * `#1a1a18`, paper `#f1efe8`), a primary button that is ink in light and paper in dark (the
138
+ * mark's two tones), and one restrained violet (`link`, `focus`) kept for interaction only.
139
+ * Dark is ink surfaces with paper text. Every text colour has a contrast of at least 4.5:1 on the backgrounds it
137
140
  * is drawn on, and control edges and the focus ring at least 3:1, in both schemes (WCAG 2.2
138
141
  * AA); the contract's tests compute it.
139
142
  *
140
143
  * @example
141
144
  * ```ts
142
- * DEFAULT_THEME.light.primary // '#5b4cf0'
145
+ * DEFAULT_THEME.light.primary // '#1a1a18'
143
146
  * ```
144
147
  */
145
148
  declare const DEFAULT_THEME: Theme;
@@ -220,7 +223,7 @@ declare function themeToCssVariables(theme: ThemeOverrides): Record<string, stri
220
223
  *
221
224
  * @example
222
225
  * ```ts
223
- * contrastRatio('#ffffff', '#5b4cf0') >= 4.5 // white text on the default primary passes AA
226
+ * contrastRatio('#f1efe8', '#1a1a18') >= 4.5 // paper on the default primary (ink) passes AA
224
227
  * ```
225
228
  */
226
229
  declare function contrastRatio(foreground: string, background: string): number;
package/dist/theme.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  isValidThemeValue2,
6
6
  themeToCssVariables2,
7
7
  contrastRatio2
8
- } from "./shared/chunk-pcn6ax54.js";
8
+ } from "./shared/chunk-g0ddvjqg.js";
9
9
  export {
10
10
  DEFAULT_THEME2 as DEFAULT_THEME,
11
11
  THEME_TOKENS2 as THEME_TOKENS,