@nswds/app 1.46.0 → 1.47.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.
- package/dist/globals.css +32 -0
- package/dist/index.cjs +47 -273
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -23
- package/dist/index.d.ts +8 -23
- package/dist/index.js +48 -263
- package/dist/index.js.map +1 -1
- package/dist/styles.css +32 -0
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
package/dist/globals.css
CHANGED
|
@@ -5510,6 +5510,11 @@
|
|
|
5510
5510
|
column-gap: calc(var(--spacing) * 3);
|
|
5511
5511
|
}
|
|
5512
5512
|
}
|
|
5513
|
+
.has-\[\>svg\]\:px-3 {
|
|
5514
|
+
&:has(>svg) {
|
|
5515
|
+
padding-inline: calc(var(--spacing) * 3);
|
|
5516
|
+
}
|
|
5517
|
+
}
|
|
5513
5518
|
.aria-disabled\:opacity-50 {
|
|
5514
5519
|
&[aria-disabled="true"] {
|
|
5515
5520
|
opacity: 50%;
|
|
@@ -7364,6 +7369,11 @@
|
|
|
7364
7369
|
padding-block: calc(calc(var(--spacing) * 4) - 1px);
|
|
7365
7370
|
}
|
|
7366
7371
|
}
|
|
7372
|
+
.sm\:pr-2\.5 {
|
|
7373
|
+
@media (width >= 40rem) {
|
|
7374
|
+
padding-right: calc(var(--spacing) * 2.5);
|
|
7375
|
+
}
|
|
7376
|
+
}
|
|
7367
7377
|
.sm\:pr-3 {
|
|
7368
7378
|
@media (width >= 40rem) {
|
|
7369
7379
|
padding-right: calc(var(--spacing) * 3);
|
|
@@ -7384,6 +7394,11 @@
|
|
|
7384
7394
|
padding-left: calc(var(--spacing) * 1.5);
|
|
7385
7395
|
}
|
|
7386
7396
|
}
|
|
7397
|
+
.sm\:pl-2\.5 {
|
|
7398
|
+
@media (width >= 40rem) {
|
|
7399
|
+
padding-left: calc(var(--spacing) * 2.5);
|
|
7400
|
+
}
|
|
7401
|
+
}
|
|
7387
7402
|
.sm\:pl-\[calc\(--spacing\(4\)-1px\)\] {
|
|
7388
7403
|
@media (width >= 40rem) {
|
|
7389
7404
|
padding-left: calc(calc(var(--spacing) * 4) - 1px);
|
|
@@ -7916,6 +7931,11 @@
|
|
|
7916
7931
|
border-color: oklch(0.426426783985819 0.011202235626284581 232.61715023407646);
|
|
7917
7932
|
}
|
|
7918
7933
|
}
|
|
7934
|
+
.dark\:border-input {
|
|
7935
|
+
&:where([data-theme=dark], [data-theme=dark] *) {
|
|
7936
|
+
border-color: var(--input);
|
|
7937
|
+
}
|
|
7938
|
+
}
|
|
7919
7939
|
.dark\:border-slate-800 {
|
|
7920
7940
|
&:where([data-theme=dark], [data-theme=dark] *) {
|
|
7921
7941
|
border-color: var(--color-slate-800);
|
|
@@ -8764,6 +8784,18 @@
|
|
|
8764
8784
|
}
|
|
8765
8785
|
}
|
|
8766
8786
|
}
|
|
8787
|
+
.dark\:hover\:bg-accent\/50 {
|
|
8788
|
+
&:where([data-theme=dark], [data-theme=dark] *) {
|
|
8789
|
+
&:hover {
|
|
8790
|
+
@media (hover: hover) {
|
|
8791
|
+
background-color: var(--accent);
|
|
8792
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
8793
|
+
background-color: color-mix(in oklab, var(--accent) 50%, transparent);
|
|
8794
|
+
}
|
|
8795
|
+
}
|
|
8796
|
+
}
|
|
8797
|
+
}
|
|
8798
|
+
}
|
|
8767
8799
|
.dark\:hover\:bg-gray-700 {
|
|
8768
8800
|
&:where([data-theme=dark], [data-theme=dark] *) {
|
|
8769
8801
|
&:hover {
|
package/dist/index.cjs
CHANGED
|
@@ -56,13 +56,6 @@ var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
|
|
|
56
56
|
var reactDayPicker = require('react-day-picker');
|
|
57
57
|
var useEmblaCarousel = require('embla-carousel-react');
|
|
58
58
|
var inputOtp = require('input-otp');
|
|
59
|
-
var NextAuth = require('next-auth');
|
|
60
|
-
var MicrosoftEntraID = require('next-auth/providers/microsoft-entra-id');
|
|
61
|
-
var drizzleOrm = require('drizzle-orm');
|
|
62
|
-
var drizzleAdapter = require('@auth/drizzle-adapter');
|
|
63
|
-
var libsql = require('drizzle-orm/libsql');
|
|
64
|
-
var client$1 = require('@libsql/client');
|
|
65
|
-
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
66
59
|
var slugify = require('@sindresorhus/slugify');
|
|
67
60
|
var zustand = require('zustand');
|
|
68
61
|
var middleware = require('zustand/middleware');
|
|
@@ -120,20 +113,13 @@ var RechartsPrimitive__namespace = /*#__PURE__*/_interopNamespace(RechartsPrimit
|
|
|
120
113
|
var HoverCardPrimitives__namespace = /*#__PURE__*/_interopNamespace(HoverCardPrimitives);
|
|
121
114
|
var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
|
|
122
115
|
var useEmblaCarousel__default = /*#__PURE__*/_interopDefault(useEmblaCarousel);
|
|
123
|
-
var NextAuth__default = /*#__PURE__*/_interopDefault(NextAuth);
|
|
124
|
-
var MicrosoftEntraID__default = /*#__PURE__*/_interopDefault(MicrosoftEntraID);
|
|
125
116
|
|
|
126
|
-
var __defProp = Object.defineProperty;
|
|
127
117
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
128
118
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
129
119
|
}) : x)(function(x) {
|
|
130
120
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
131
121
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
132
122
|
});
|
|
133
|
-
var __export = (target, all) => {
|
|
134
|
-
for (var name in all)
|
|
135
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
136
|
-
};
|
|
137
123
|
var Icons = {
|
|
138
124
|
account_circle: (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { fill: "currentColor", "data-slot": "icon", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M234-276q51-39 114-61.5T480-360q69 0 132 22.5T726-276q35-41 54.5-93T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 59 19.5 111t54.5 93Zm246-164q-59 0-99.5-40.5T340-580q0-59 40.5-99.5T480-720q59 0 99.5 40.5T620-580q0 59-40.5 99.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q53 0 100-15.5t86-44.5q-39-29-86-44.5T480-280q-53 0-100 15.5T294-220q39 29 86 44.5T480-160Zm0-360q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm0-60Zm0 360Z" }) }),
|
|
139
125
|
add: (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { fill: "currentColor", "data-slot": "icon", viewBox: "0 -960 960 960", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M440-440H240q-17 0-28.5-11.5T200-480q0-17 11.5-28.5T240-520h200v-200q0-17 11.5-28.5T480-760q17 0 28.5 11.5T520-720v200h200q17 0 28.5 11.5T760-480q0 17-11.5 28.5T720-440H520v200q0 17-11.5 28.5T480-200q-17 0-28.5-11.5T440-240v-200Z" }) }),
|
|
@@ -242,11 +228,11 @@ var Icons = {
|
|
|
242
228
|
function cn(...inputs) {
|
|
243
229
|
return tailwindMerge.twMerge(clsx21.clsx(inputs));
|
|
244
230
|
}
|
|
245
|
-
function truncate(
|
|
246
|
-
if (
|
|
247
|
-
return
|
|
231
|
+
function truncate(text, maxLength) {
|
|
232
|
+
if (text.length <= maxLength) {
|
|
233
|
+
return text;
|
|
248
234
|
}
|
|
249
|
-
return
|
|
235
|
+
return text.slice(0, maxLength) + "...";
|
|
250
236
|
}
|
|
251
237
|
function kebabCase(str) {
|
|
252
238
|
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
@@ -7798,7 +7784,7 @@ function Heading({
|
|
|
7798
7784
|
|
|
7799
7785
|
// package.json
|
|
7800
7786
|
var package_default = {
|
|
7801
|
-
version: "1.
|
|
7787
|
+
version: "1.46.1"};
|
|
7802
7788
|
function Logo(props) {
|
|
7803
7789
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7804
7790
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "NSW Government" }),
|
|
@@ -13334,7 +13320,7 @@ function distance2D(a, b) {
|
|
|
13334
13320
|
|
|
13335
13321
|
// node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs
|
|
13336
13322
|
var PanSession = class {
|
|
13337
|
-
constructor(event,
|
|
13323
|
+
constructor(event, handlers, { transformPagePoint, contextWindow, dragSnapToOrigin = false } = {}) {
|
|
13338
13324
|
this.startEvent = null;
|
|
13339
13325
|
this.lastMoveEvent = null;
|
|
13340
13326
|
this.lastMoveEventInfo = null;
|
|
@@ -13379,7 +13365,7 @@ var PanSession = class {
|
|
|
13379
13365
|
if (!isPrimaryPointer(event))
|
|
13380
13366
|
return;
|
|
13381
13367
|
this.dragSnapToOrigin = dragSnapToOrigin;
|
|
13382
|
-
this.handlers =
|
|
13368
|
+
this.handlers = handlers;
|
|
13383
13369
|
this.transformPagePoint = transformPagePoint;
|
|
13384
13370
|
this.contextWindow = contextWindow || window;
|
|
13385
13371
|
const info = extractEventInfo(event);
|
|
@@ -13387,12 +13373,12 @@ var PanSession = class {
|
|
|
13387
13373
|
const { point } = initialInfo;
|
|
13388
13374
|
const { timestamp } = frameData;
|
|
13389
13375
|
this.history = [{ ...point, timestamp }];
|
|
13390
|
-
const { onSessionStart } =
|
|
13376
|
+
const { onSessionStart } = handlers;
|
|
13391
13377
|
onSessionStart && onSessionStart(event, getPanInfo(initialInfo, this.history));
|
|
13392
13378
|
this.removeListeners = pipe(addPointerEvent(this.contextWindow, "pointermove", this.handlePointerMove), addPointerEvent(this.contextWindow, "pointerup", this.handlePointerUp), addPointerEvent(this.contextWindow, "pointercancel", this.handlePointerUp));
|
|
13393
13379
|
}
|
|
13394
|
-
updateHandlers(
|
|
13395
|
-
this.handlers =
|
|
13380
|
+
updateHandlers(handlers) {
|
|
13381
|
+
this.handlers = handlers;
|
|
13396
13382
|
}
|
|
13397
13383
|
end() {
|
|
13398
13384
|
this.removeListeners && this.removeListeners();
|
|
@@ -16449,6 +16435,24 @@ function NavigationMenuIndicator({
|
|
|
16449
16435
|
}
|
|
16450
16436
|
);
|
|
16451
16437
|
}
|
|
16438
|
+
var buttonVariants2 = classVarianceAuthority.cva(
|
|
16439
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
16440
|
+
{
|
|
16441
|
+
variants: {
|
|
16442
|
+
variant: {
|
|
16443
|
+
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
|
16444
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50"
|
|
16445
|
+
},
|
|
16446
|
+
size: {
|
|
16447
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
16448
|
+
icon: "size-9"
|
|
16449
|
+
}
|
|
16450
|
+
},
|
|
16451
|
+
defaultVariants: {
|
|
16452
|
+
size: "default"
|
|
16453
|
+
}
|
|
16454
|
+
}
|
|
16455
|
+
);
|
|
16452
16456
|
function Pagination({ className, ...props }) {
|
|
16453
16457
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
16454
16458
|
"nav",
|
|
@@ -16474,24 +16478,21 @@ function PaginationContent({ className, ...props }) {
|
|
|
16474
16478
|
function PaginationItem({ ...props }) {
|
|
16475
16479
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { "data-slot": "pagination-item", ...props });
|
|
16476
16480
|
}
|
|
16477
|
-
function PaginationLink({
|
|
16478
|
-
className,
|
|
16479
|
-
isActive,
|
|
16480
|
-
children,
|
|
16481
|
-
href,
|
|
16482
|
-
...props
|
|
16483
|
-
}) {
|
|
16481
|
+
function PaginationLink({ className, isActive, size = "icon", ...props }) {
|
|
16484
16482
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
16485
|
-
|
|
16483
|
+
"a",
|
|
16486
16484
|
{
|
|
16487
16485
|
"aria-current": isActive ? "page" : void 0,
|
|
16488
16486
|
"data-slot": "pagination-link",
|
|
16489
16487
|
"data-active": isActive,
|
|
16490
|
-
|
|
16491
|
-
|
|
16492
|
-
|
|
16493
|
-
|
|
16494
|
-
|
|
16488
|
+
className: cn(
|
|
16489
|
+
buttonVariants2({
|
|
16490
|
+
variant: isActive ? "outline" : "ghost",
|
|
16491
|
+
size
|
|
16492
|
+
}),
|
|
16493
|
+
className
|
|
16494
|
+
),
|
|
16495
|
+
...props
|
|
16495
16496
|
}
|
|
16496
16497
|
);
|
|
16497
16498
|
}
|
|
@@ -16501,10 +16502,10 @@ function PaginationPrevious({ className, ...props }) {
|
|
|
16501
16502
|
{
|
|
16502
16503
|
"aria-label": "Go to previous page",
|
|
16503
16504
|
size: "default",
|
|
16504
|
-
className: cn("", className),
|
|
16505
|
+
className: cn("gap-1 px-2.5 sm:pl-2.5", className),
|
|
16505
16506
|
...props,
|
|
16506
16507
|
children: [
|
|
16507
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icons.west, {
|
|
16508
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icons.west, {}),
|
|
16508
16509
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:block", children: "Previous" })
|
|
16509
16510
|
]
|
|
16510
16511
|
}
|
|
@@ -16516,11 +16517,11 @@ function PaginationNext({ className, ...props }) {
|
|
|
16516
16517
|
{
|
|
16517
16518
|
"aria-label": "Go to next page",
|
|
16518
16519
|
size: "default",
|
|
16519
|
-
className: cn("", className),
|
|
16520
|
+
className: cn("gap-1 px-2.5 sm:pr-2.5", className),
|
|
16520
16521
|
...props,
|
|
16521
16522
|
children: [
|
|
16522
16523
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:block", children: "Next" }),
|
|
16523
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icons.east, {
|
|
16524
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icons.east, {})
|
|
16524
16525
|
]
|
|
16525
16526
|
}
|
|
16526
16527
|
);
|
|
@@ -17306,7 +17307,7 @@ var colors2 = {
|
|
|
17306
17307
|
]
|
|
17307
17308
|
};
|
|
17308
17309
|
function Switch2({
|
|
17309
|
-
color: color2 = "
|
|
17310
|
+
color: color2 = "primary",
|
|
17310
17311
|
className,
|
|
17311
17312
|
...props
|
|
17312
17313
|
}) {
|
|
@@ -23026,64 +23027,6 @@ function DescriptionDetails({ className, ...props }) {
|
|
|
23026
23027
|
function generateLevelId() {
|
|
23027
23028
|
return `level-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
23028
23029
|
}
|
|
23029
|
-
function getMaxDepth(items, currentDepth = 1) {
|
|
23030
|
-
if (!items || !Array.isArray(items) || items.length === 0) {
|
|
23031
|
-
return currentDepth;
|
|
23032
|
-
}
|
|
23033
|
-
let maxDepth2 = currentDepth;
|
|
23034
|
-
for (const item of items) {
|
|
23035
|
-
if (item && item.links && Array.isArray(item.links) && item.links.length > 0) {
|
|
23036
|
-
const itemDepth = getMaxDepth(item.links, currentDepth + 1);
|
|
23037
|
-
maxDepth2 = Math.max(maxDepth2, itemDepth);
|
|
23038
|
-
}
|
|
23039
|
-
}
|
|
23040
|
-
return maxDepth2;
|
|
23041
|
-
}
|
|
23042
|
-
function findItemById(items, id3) {
|
|
23043
|
-
if (!items || !Array.isArray(items)) {
|
|
23044
|
-
return null;
|
|
23045
|
-
}
|
|
23046
|
-
for (const item of items) {
|
|
23047
|
-
if (!item) continue;
|
|
23048
|
-
if (item.id === id3) {
|
|
23049
|
-
return item;
|
|
23050
|
-
}
|
|
23051
|
-
if (item.links && Array.isArray(item.links)) {
|
|
23052
|
-
const found = findItemById(item.links, id3);
|
|
23053
|
-
if (found) return found;
|
|
23054
|
-
}
|
|
23055
|
-
}
|
|
23056
|
-
return null;
|
|
23057
|
-
}
|
|
23058
|
-
function findPathToItem(items, targetId, path = []) {
|
|
23059
|
-
if (!items || !Array.isArray(items)) {
|
|
23060
|
-
return null;
|
|
23061
|
-
}
|
|
23062
|
-
for (const item of items) {
|
|
23063
|
-
if (!item) continue;
|
|
23064
|
-
const currentPath = [...path, item];
|
|
23065
|
-
if (item.id === targetId) {
|
|
23066
|
-
return currentPath;
|
|
23067
|
-
}
|
|
23068
|
-
if (item.links && Array.isArray(item.links)) {
|
|
23069
|
-
const found = findPathToItem(item.links, targetId, currentPath);
|
|
23070
|
-
if (found) return found;
|
|
23071
|
-
}
|
|
23072
|
-
}
|
|
23073
|
-
return null;
|
|
23074
|
-
}
|
|
23075
|
-
function getTotalItemCount(items) {
|
|
23076
|
-
if (!items || !Array.isArray(items)) {
|
|
23077
|
-
return 0;
|
|
23078
|
-
}
|
|
23079
|
-
let count = items.length;
|
|
23080
|
-
for (const item of items) {
|
|
23081
|
-
if (item && item.links && Array.isArray(item.links)) {
|
|
23082
|
-
count += getTotalItemCount(item.links);
|
|
23083
|
-
}
|
|
23084
|
-
}
|
|
23085
|
-
return count;
|
|
23086
|
-
}
|
|
23087
23030
|
function generateBreadcrumb(levels, maxLength = 50) {
|
|
23088
23031
|
if (levels.length <= 1) return levels[0]?.title || "Menu";
|
|
23089
23032
|
const breadcrumb = levels.map((level) => level.title).join(" \u203A ");
|
|
@@ -23391,166 +23334,6 @@ function MobileHeader({
|
|
|
23391
23334
|
] })
|
|
23392
23335
|
] });
|
|
23393
23336
|
}
|
|
23394
|
-
|
|
23395
|
-
// src/db/schema/users.ts
|
|
23396
|
-
var users_exports = {};
|
|
23397
|
-
__export(users_exports, {
|
|
23398
|
-
users: () => users
|
|
23399
|
-
});
|
|
23400
|
-
var users = sqliteCore.sqliteTable("user", {
|
|
23401
|
-
id: sqliteCore.text("id").primaryKey().$defaultFn(() => crypto.randomUUID()),
|
|
23402
|
-
name: sqliteCore.text("name"),
|
|
23403
|
-
email: sqliteCore.text("email").unique(),
|
|
23404
|
-
emailVerified: sqliteCore.integer("emailVerified", { mode: "timestamp_ms" }),
|
|
23405
|
-
image: sqliteCore.text("image"),
|
|
23406
|
-
role: sqliteCore.text("role", { enum: ["ADMIN", "USER"] }).default("USER")
|
|
23407
|
-
});
|
|
23408
|
-
|
|
23409
|
-
// src/db/schema/accounts.ts
|
|
23410
|
-
var accounts_exports = {};
|
|
23411
|
-
__export(accounts_exports, {
|
|
23412
|
-
accounts: () => accounts
|
|
23413
|
-
});
|
|
23414
|
-
var accounts = sqliteCore.sqliteTable(
|
|
23415
|
-
"account",
|
|
23416
|
-
{
|
|
23417
|
-
userId: sqliteCore.text("userId").notNull().references(() => users.id, { onDelete: "cascade" }),
|
|
23418
|
-
type: sqliteCore.text("type").$type().notNull(),
|
|
23419
|
-
provider: sqliteCore.text("provider").notNull(),
|
|
23420
|
-
providerAccountId: sqliteCore.text("providerAccountId").notNull(),
|
|
23421
|
-
refresh_token: sqliteCore.text("refresh_token"),
|
|
23422
|
-
access_token: sqliteCore.text("access_token"),
|
|
23423
|
-
expires_at: sqliteCore.integer("expires_at"),
|
|
23424
|
-
token_type: sqliteCore.text("token_type"),
|
|
23425
|
-
scope: sqliteCore.text("scope"),
|
|
23426
|
-
id_token: sqliteCore.text("id_token"),
|
|
23427
|
-
session_state: sqliteCore.text("session_state")
|
|
23428
|
-
},
|
|
23429
|
-
(table) => [
|
|
23430
|
-
sqliteCore.primaryKey({
|
|
23431
|
-
columns: [table.provider, table.providerAccountId],
|
|
23432
|
-
name: "accounts_pk"
|
|
23433
|
-
})
|
|
23434
|
-
]
|
|
23435
|
-
);
|
|
23436
|
-
|
|
23437
|
-
// src/db/schema/sessions.ts
|
|
23438
|
-
var sessions_exports = {};
|
|
23439
|
-
__export(sessions_exports, {
|
|
23440
|
-
sessions: () => sessions
|
|
23441
|
-
});
|
|
23442
|
-
var sessions = sqliteCore.sqliteTable("session", {
|
|
23443
|
-
sessionToken: sqliteCore.text("sessionToken").primaryKey(),
|
|
23444
|
-
userId: sqliteCore.text("userId").notNull().references(() => users.id, { onDelete: "cascade" }),
|
|
23445
|
-
expires: sqliteCore.integer("expires", { mode: "timestamp_ms" }).notNull()
|
|
23446
|
-
});
|
|
23447
|
-
|
|
23448
|
-
// src/db/index.ts
|
|
23449
|
-
var client = client$1.createClient({
|
|
23450
|
-
url: process.env.TURSO_CONNECTION_URL,
|
|
23451
|
-
authToken: process.env.TURSO_AUTH_TOKEN
|
|
23452
|
-
});
|
|
23453
|
-
var db = libsql.drizzle(client, {
|
|
23454
|
-
schema: {
|
|
23455
|
-
...users_exports,
|
|
23456
|
-
...accounts_exports,
|
|
23457
|
-
...sessions_exports
|
|
23458
|
-
}
|
|
23459
|
-
});
|
|
23460
|
-
|
|
23461
|
-
// src/auth.ts
|
|
23462
|
-
var { handlers, signIn, signOut, auth } = NextAuth__default.default({
|
|
23463
|
-
adapter: drizzleAdapter.DrizzleAdapter(db),
|
|
23464
|
-
providers: [
|
|
23465
|
-
MicrosoftEntraID__default.default({
|
|
23466
|
-
clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID,
|
|
23467
|
-
clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET,
|
|
23468
|
-
issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER,
|
|
23469
|
-
authorization: {
|
|
23470
|
-
params: {
|
|
23471
|
-
scope: "openid profile email User.Read offline_access",
|
|
23472
|
-
tenant: process.env.AUTH_MICROSOFT_ENTRA_ID_TENANT_ID
|
|
23473
|
-
}
|
|
23474
|
-
}
|
|
23475
|
-
})
|
|
23476
|
-
],
|
|
23477
|
-
callbacks: {
|
|
23478
|
-
authorized: async ({ auth: auth2, request }) => {
|
|
23479
|
-
if (request.nextUrl.pathname.startsWith("/")) {
|
|
23480
|
-
return true;
|
|
23481
|
-
}
|
|
23482
|
-
return !!auth2;
|
|
23483
|
-
},
|
|
23484
|
-
jwt({ token, user }) {
|
|
23485
|
-
if (user) {
|
|
23486
|
-
token.id = user.id;
|
|
23487
|
-
}
|
|
23488
|
-
return token;
|
|
23489
|
-
},
|
|
23490
|
-
async session({ session, user }) {
|
|
23491
|
-
session.user.id = user.id;
|
|
23492
|
-
const [microsoftAccount] = await db.select().from(accounts).where(drizzleOrm.and(drizzleOrm.eq(accounts.userId, user.id), drizzleOrm.eq(accounts.provider, "microsoft-entra-id"))).limit(1);
|
|
23493
|
-
if (microsoftAccount && microsoftAccount.expires_at && microsoftAccount.expires_at * 1e3 < Date.now()) {
|
|
23494
|
-
try {
|
|
23495
|
-
const tokenEndpoint = `https://login.microsoftonline.com/${process.env.AUTH_MICROSOFT_ENTRA_ID_TENANT_ID}/oauth2/v2.0/token`;
|
|
23496
|
-
const response = await fetch(tokenEndpoint, {
|
|
23497
|
-
method: "POST",
|
|
23498
|
-
headers: {
|
|
23499
|
-
"Content-Type": "application/x-www-form-urlencoded"
|
|
23500
|
-
},
|
|
23501
|
-
body: new URLSearchParams({
|
|
23502
|
-
client_id: process.env.AUTH_MICROSOFT_ENTRA_ID_ID,
|
|
23503
|
-
client_secret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET,
|
|
23504
|
-
grant_type: "refresh_token",
|
|
23505
|
-
refresh_token: microsoftAccount.refresh_token,
|
|
23506
|
-
scope: "openid profile email offline_access"
|
|
23507
|
-
})
|
|
23508
|
-
});
|
|
23509
|
-
const tokensOrError = await response.json();
|
|
23510
|
-
if (!response.ok) throw tokensOrError;
|
|
23511
|
-
const newTokens = tokensOrError;
|
|
23512
|
-
await db.update(accounts).set({
|
|
23513
|
-
access_token: newTokens.access_token,
|
|
23514
|
-
expires_at: Math.floor(Date.now() / 1e3 + newTokens.expires_in),
|
|
23515
|
-
refresh_token: newTokens.refresh_token ?? microsoftAccount.refresh_token,
|
|
23516
|
-
id_token: newTokens.id_token ?? microsoftAccount.id_token
|
|
23517
|
-
}).where(
|
|
23518
|
-
drizzleOrm.and(
|
|
23519
|
-
drizzleOrm.eq(accounts.provider, "microsoft-entra-id"),
|
|
23520
|
-
drizzleOrm.eq(accounts.providerAccountId, microsoftAccount.providerAccountId)
|
|
23521
|
-
)
|
|
23522
|
-
);
|
|
23523
|
-
} catch (error) {
|
|
23524
|
-
console.error("Error refreshing access_token", error);
|
|
23525
|
-
session.error = "RefreshTokenError";
|
|
23526
|
-
}
|
|
23527
|
-
}
|
|
23528
|
-
return session;
|
|
23529
|
-
}
|
|
23530
|
-
}
|
|
23531
|
-
});
|
|
23532
|
-
|
|
23533
|
-
// src/actions/auth-actions.ts
|
|
23534
|
-
async function signInWithEntra(formData) {
|
|
23535
|
-
const redirect = formData.get("redirect")?.toString() || "/dashboard";
|
|
23536
|
-
await signIn("microsoft-entra-id", { redirectTo: redirect });
|
|
23537
|
-
}
|
|
23538
|
-
async function signInGeneric(formData) {
|
|
23539
|
-
const redirect = formData.get("redirect")?.toString() || "/dashboard";
|
|
23540
|
-
await signIn(void 0, { redirectTo: redirect });
|
|
23541
|
-
}
|
|
23542
|
-
async function signOutAction() {
|
|
23543
|
-
await signOut();
|
|
23544
|
-
}
|
|
23545
|
-
function SignInButton() {
|
|
23546
|
-
return /* @__PURE__ */ jsxRuntime.jsx("form", { action: signInGeneric, children: /* @__PURE__ */ jsxRuntime.jsx(Button2, { type: "submit", variant: "outline", children: "Sign in" }) });
|
|
23547
|
-
}
|
|
23548
|
-
function SignOutButton() {
|
|
23549
|
-
return /* @__PURE__ */ jsxRuntime.jsx("form", { action: signOutAction, children: /* @__PURE__ */ jsxRuntime.jsx(Button2, { type: "submit", color: "danger", children: "Sign Out" }) });
|
|
23550
|
-
}
|
|
23551
|
-
function SignInWithEntraButton() {
|
|
23552
|
-
return /* @__PURE__ */ jsxRuntime.jsx("form", { action: signInWithEntra, children: /* @__PURE__ */ jsxRuntime.jsx(Button2, { type: "submit", children: "Sign in with Entra" }) });
|
|
23553
|
-
}
|
|
23554
23337
|
var MOBILE_BREAKPOINT = 768;
|
|
23555
23338
|
function useIsMobile() {
|
|
23556
23339
|
const [isMobile, setIsMobile] = React16__namespace.useState(void 0);
|
|
@@ -23581,15 +23364,15 @@ function useDisableToc() {
|
|
|
23581
23364
|
}, [setToc]);
|
|
23582
23365
|
}
|
|
23583
23366
|
function getNodeText(node) {
|
|
23584
|
-
let
|
|
23367
|
+
let text = "";
|
|
23585
23368
|
for (const child of node.children ?? []) {
|
|
23586
23369
|
if ("type" in child && child.type === "text") {
|
|
23587
|
-
|
|
23370
|
+
text += child.attributes?.content ?? "";
|
|
23588
23371
|
} else if (child instanceof HTMLElement) {
|
|
23589
|
-
|
|
23372
|
+
text += getNodeText(child);
|
|
23590
23373
|
}
|
|
23591
23374
|
}
|
|
23592
|
-
return
|
|
23375
|
+
return text;
|
|
23593
23376
|
}
|
|
23594
23377
|
function domToSimple(node) {
|
|
23595
23378
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
@@ -23967,9 +23750,6 @@ exports.SheetTitle = SheetTitle;
|
|
|
23967
23750
|
exports.SheetTrigger = SheetTrigger;
|
|
23968
23751
|
exports.SidebarLink = SidebarLink;
|
|
23969
23752
|
exports.SidebarNavigation = SidebarNavigation;
|
|
23970
|
-
exports.SignInButton = SignInButton;
|
|
23971
|
-
exports.SignInWithEntraButton = SignInWithEntraButton;
|
|
23972
|
-
exports.SignOutButton = SignOutButton;
|
|
23973
23753
|
exports.SiteSearch = SiteSearch;
|
|
23974
23754
|
exports.Skeleton = Skeleton;
|
|
23975
23755
|
exports.Slider = Slider;
|
|
@@ -24037,20 +23817,14 @@ exports.createColorData = createColorData;
|
|
|
24037
23817
|
exports.createFormStore = createFormStore;
|
|
24038
23818
|
exports.darkenColor = darkenColor;
|
|
24039
23819
|
exports.domToSimple = domToSimple;
|
|
24040
|
-
exports.findItemById = findItemById;
|
|
24041
|
-
exports.findPathToItem = findPathToItem;
|
|
24042
23820
|
exports.focusInput = focusInput;
|
|
24043
23821
|
exports.focusRing = focusRing;
|
|
24044
|
-
exports.generateBreadcrumb = generateBreadcrumb;
|
|
24045
23822
|
exports.generateColorThemes = generateColorThemes;
|
|
24046
|
-
exports.generateLevelId = generateLevelId;
|
|
24047
23823
|
exports.getColorClassName = getColorClassName;
|
|
24048
23824
|
exports.getColorValue = getColorValue;
|
|
24049
23825
|
exports.getHeadings = getHeadings;
|
|
24050
|
-
exports.getMaxDepth = getMaxDepth;
|
|
24051
23826
|
exports.getNodeText = getNodeText;
|
|
24052
23827
|
exports.getSurroundingColors = getSurroundingColors;
|
|
24053
|
-
exports.getTotalItemCount = getTotalItemCount;
|
|
24054
23828
|
exports.getYAxisDomain = getYAxisDomain;
|
|
24055
23829
|
exports.hasErrorInput = hasErrorInput;
|
|
24056
23830
|
exports.hasOnlyOneValueForKey = hasOnlyOneValueForKey;
|