@activecollab/components 2.0.436 → 2.0.438
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/cjs/presentation/shared/ConnectRepositoryDialog.js +0 -3
- package/dist/cjs/presentation/shared/ConnectRepositoryDialog.js.map +1 -1
- package/dist/cjs/presentation/shared/LinkBranchOrPullRequestDialog.js +0 -3
- package/dist/cjs/presentation/shared/LinkBranchOrPullRequestDialog.js.map +1 -1
- package/dist/cjs/presentation/shared/TwoFactorDialogs.js +0 -9
- package/dist/cjs/presentation/shared/TwoFactorDialogs.js.map +1 -1
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.d.ts.map +1 -1
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.js +0 -3
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.js.map +1 -1
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.d.ts.map +1 -1
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.js +0 -3
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.js.map +1 -1
- package/dist/esm/presentation/shared/TwoFactorDialogs.d.ts.map +1 -1
- package/dist/esm/presentation/shared/TwoFactorDialogs.js +0 -9
- package/dist/esm/presentation/shared/TwoFactorDialogs.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorDialogs.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Dialog","_IconButton","_Icons","_InfoBox","_Input","_Label","_Loaders","_ToastMessage","_Tooltip","_Transitions","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","SANS","MONO","asInputChange","fn","SAMPLE_BACKUP_CODES","SAMPLE_LOGIN_CODE","StyledToastAnchor","styled","div","withConfig","displayName","componentId","CopyToast","_ref","open","toastKey","text","onClose","createElement","SlideFromTop","in","ToastMessage","key","className","type","dismissible","dropShadow","timeout","StyledGateBody","BackupCodesDialogs","exports","_ref2","_useState","useState","_useState2","password","setPassword","_useState3","_useState4","attempted","setAttempted","_useState5","_useState6","revealOpen","setRevealOpen","_useState7","_useState8","loading","setLoading","_useState9","_useState0","copyOpen","setCopyOpen","_useState1","_useState10","copyKey","setCopyKey","useEffect","undefined","timer","window","setTimeout","clearTimeout","passwordInvalid","trim","handleConfirm","handleCopy","k","closeReveal","Fragment","Dialog","disableCloseOnEsc","Title","ContentDivider","Content","Body2","color","lineHeight","Label","htmlFor","InputPassword","id","wrapperClassName","onChange","invalid","errorMessage","autoFocus","autoComplete","Actions","Button","variant","style","marginRight","onClick","BackupCodesRevealDialog","onCopy","StyledRevealBody","_ref3","map","_","index","SkeletonLoader","code","InfoBox","showIcon","title","disabled","StyledCodeRow","StyledRevealTitle","CreateLoginCodeDialogs","_ref4","userName","firstName","useMemo","split","_useState11","_useState12","_useState13","_useState14","_useState15","_useState16","_useState17","_useState18","expiry","setExpiry","_useState19","_useState20","_useState21","_useState22","when","Date","now","hh","String","getHours","padStart","mm","getMinutes","concat","disableDefaultHeading","Header3","IconButton","CancelCrossIcon","Tooltip","CopyIcon","Caption1"],"sources":["../../../../src/presentation/shared/TwoFactorDialogs.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { CancelCrossIcon, CopyIcon } from \"../../components/Icons\";\nimport { InfoBox } from \"../../components/InfoBox\";\nimport { InputPassword } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { ToastMessage } from \"../../components/ToastMessage\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { SlideFromTop } from \"../../components/Transitions\";\nimport { Body2, Caption1, Header3 } from \"../../components/Typography\";\n\n/**\n * Self-hosted 2FA dialogs shared by the People stories (Users list + User\n * profile). Two flows, both reached from the user three-dot menu and both\n * gated (in the menu) behind the self-hosted + 2FA-enabled guard:\n *\n * - **Backup Codes** (own account, `self` menu): a single dialog that both\n * explains the destructive regenerate and takes the password (identity\n * confirmation is \"valid password + submit\", no separate confirm step).\n * Submitting opens the reveal dialog, which shows a skeleton while the new\n * set \"loads\", then the 10 codes once.\n * - **Create Login Code** (another user, `member`/`client` menu): an owner\n * re-enters their own password, then a one-time code is revealed once with\n * its expiry and a \"user notified\" note. (Task #18.)\n *\n * Everything is mocked locally: passwords aren't checked, the \"load\" is a\n * timer, and the codes are static samples.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\nconst MONO =\n '\"SF Mono\", \"Roboto Mono\", Menlo, Consolas, \"Courier New\", monospace';\n\n/**\n * DS `InputPassword` calls `onChange` with the string value at runtime, but its\n * type is still inherited from the native input (`ChangeEventHandler`). Adapt a\n * string handler so TypeScript is satisfied without lying about the value.\n */\nconst asInputChange = (\n fn: (value: string) => void\n): React.ChangeEventHandler<HTMLInputElement> =>\n fn as unknown as React.ChangeEventHandler<HTMLInputElement>;\n\n/* Sample codes (10+10 A-Z0-9), mirroring the real generator's format. */\nconst SAMPLE_BACKUP_CODES = [\n \"4K7Q9ZM2XN-8V3TJRD6WP\",\n \"P2W8XK4M9Q-3RJ7VND5TZ\",\n \"9ZM2XN4K7Q-6WP8V3TJRD\",\n \"TJRD6WP8V3-2XN4K7Q9ZM\",\n \"V3TJRD6WP8-K7Q9ZM2XN4\",\n \"8V3TJRD6WP-Q9ZM2XN4K7\",\n \"RD5TZP2W8X-M9Q3RJ7VND\",\n \"3RJ7VND5TZ-8XK4M9QP2W\",\n \"N4K7Q9ZM2X-6WP8V3TJRD\",\n \"Q9ZM2XN4K7-8V3TJRD6WP\",\n];\n\nconst SAMPLE_LOGIN_CODE = \"4K7Q9ZM2XN-8V3TJRD6WP\";\n\n/* ------------------------------------------------------------------ */\n/* Toast (reuses the fixed upper-right anchor pattern from headers) */\n/* ------------------------------------------------------------------ */\n\nconst StyledToastAnchor = styled.div`\n position: fixed;\n top: 16px;\n right: 16px;\n z-index: 10000;\n pointer-events: none;\n\n .c-toast-message {\n pointer-events: auto;\n }\n`;\n\ninterface CopyToastProps {\n open: boolean;\n toastKey: number;\n text: string;\n onClose: () => void;\n}\n\nconst CopyToast = ({\n open,\n toastKey,\n text,\n onClose,\n}: CopyToastProps): ReactElement => (\n <StyledToastAnchor>\n <SlideFromTop in={open}>\n <ToastMessage\n key={toastKey}\n className=\"c-toast-message\"\n type=\"success\"\n text={text}\n dismissible\n dropShadow\n timeout={3000}\n onClose={onClose}\n />\n </SlideFromTop>\n </StyledToastAnchor>\n);\n\n/* ------------------------------------------------------------------ */\n/* Shared password-gate body (describe + password in one dialog) */\n/* ------------------------------------------------------------------ */\n\nconst StyledGateBody = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .pg-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n /* DS InputPassword wrapper is fixed-width — fill the dialog. */\n .pg-input.c-input-wrapper,\n .pg-input {\n width: 100%;\n max-width: none;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Backup Codes — combined describe + password dialog */\n/* ------------------------------------------------------------------ */\n\nexport interface BackupCodesDialogsProps {\n open: boolean;\n onClose: () => void;\n}\n\n/**\n * The full Backup Codes flow: the combined regenerate/password dialog, then the\n * one-time reveal dialog with its loading skeleton. Cancelling the first dialog\n * is a pure no-op — no codes are issued, no toast.\n */\nexport const BackupCodesDialogs = ({\n open,\n onClose,\n}: BackupCodesDialogsProps): ReactElement => {\n const [password, setPassword] = useState(\"\");\n const [attempted, setAttempted] = useState(false);\n const [revealOpen, setRevealOpen] = useState(false);\n const [loading, setLoading] = useState(true);\n\n const [copyOpen, setCopyOpen] = useState(false);\n const [copyKey, setCopyKey] = useState(0);\n\n // Reset the gate each time it (re)opens.\n useEffect(() => {\n if (open) {\n setPassword(\"\");\n setAttempted(false);\n }\n }, [open]);\n\n // Simulate the API generating the new set: a ~1s skeleton on reveal.\n useEffect(() => {\n if (!revealOpen) {\n return undefined;\n }\n setLoading(true);\n const timer = window.setTimeout(() => setLoading(false), 1100);\n return () => window.clearTimeout(timer);\n }, [revealOpen]);\n\n const passwordInvalid = attempted && password.trim() === \"\";\n\n const handleConfirm = (): void => {\n if (password.trim() === \"\") {\n setAttempted(true);\n return;\n }\n // Valid password + submit is all the confirmation we need: close the gate\n // and open the reveal (which regenerates the set).\n onClose();\n setRevealOpen(true);\n };\n\n const handleCopy = (): void => {\n setCopyOpen(true);\n setCopyKey((k) => k + 1);\n };\n\n const closeReveal = (): void => {\n setRevealOpen(false);\n };\n\n return (\n <>\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Regenerate Backup Codes</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledGateBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n This drops all of your existing backup codes and creates a new set\n of 10. Any codes you saved before will stop working. The new codes\n are shown only once. Enter your password to confirm it's you.\n </Body2>\n <div className=\"pg-field\">\n <Label htmlFor=\"backup-codes-password\">Your Password</Label>\n <InputPassword\n id=\"backup-codes-password\"\n wrapperClassName=\"pg-input\"\n value={password}\n onChange={asInputChange((value) => {\n setPassword(value);\n setAttempted(false);\n })}\n invalid={passwordInvalid}\n errorMessage={\n passwordInvalid ? \"Your password is required.\" : undefined\n }\n autoFocus\n autoComplete=\"current-password\"\n />\n </div>\n </StyledGateBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n onClick={handleConfirm}\n >\n Regenerate Codes\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <BackupCodesRevealDialog\n open={revealOpen}\n loading={loading}\n onClose={closeReveal}\n onCopy={handleCopy}\n />\n\n <CopyToast\n open={copyOpen}\n toastKey={copyKey}\n text=\"Backup codes copied to clipboard.\"\n onClose={() => setCopyOpen(false)}\n />\n </>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Backup Codes — one-time reveal (skeleton while loading) */\n/* ------------------------------------------------------------------ */\n\nconst StyledRevealBody = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .bc-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px 16px;\n }\n\n .bc-code {\n font-family: ${MONO};\n font-size: 14px;\n letter-spacing: 0.5px;\n color: var(--color-theme-900);\n padding: 6px 10px;\n border-radius: 6px;\n background-color: var(--color-theme-200);\n text-align: center;\n }\n\n .bc-skeleton {\n height: 32px;\n border-radius: 6px;\n width: 100%;\n }\n`;\n\ninterface BackupCodesRevealDialogProps {\n open: boolean;\n loading: boolean;\n onClose: () => void;\n onCopy: () => void;\n}\n\nconst BackupCodesRevealDialog = ({\n open,\n loading,\n onClose,\n onCopy,\n}: BackupCodesRevealDialogProps): ReactElement => (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Your Backup Codes</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledRevealBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n Use a backup code to log in when email isn't available. Each code\n works once.\n </Body2>\n <div className=\"bc-grid\">\n {loading\n ? [...Array(10)].map((_, index) => (\n <SkeletonLoader key={index} className=\"bc-skeleton\" />\n ))\n : SAMPLE_BACKUP_CODES.map((code) => (\n <div key={code} className=\"bc-code\">\n {code}\n </div>\n ))}\n </div>\n <InfoBox type=\"note\" showIcon title=\"Codes are shown only once\">\n <Body2 color=\"secondary\">\n Save them somewhere safe, they can't be displayed again. You\n can generate a new set from your profile at any time.\n </Body2>\n </InfoBox>\n </StyledRevealBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n onClick={onClose}\n disabled={loading}\n >\n I've Saved My Codes\n </Button>\n <Button variant=\"secondary\" onClick={onCopy} disabled={loading}>\n Copy Codes\n </Button>\n </Dialog.Actions>\n </Dialog>\n);\n\n/* ------------------------------------------------------------------ */\n/* Create Login Code — password gate + one-time reveal */\n/* ------------------------------------------------------------------ */\n\nconst StyledCodeRow = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .lc-label {\n display: block;\n margin-bottom: 6px;\n }\n\n .lc-code-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n background-color: var(--color-theme-200);\n }\n\n .lc-code {\n font-family: ${MONO};\n font-size: 15px;\n letter-spacing: 0.5px;\n color: var(--color-theme-900);\n flex: 1 1 auto;\n }\n\n .lc-copy svg {\n fill: var(--color-theme-600);\n }\n\n .lc-caption {\n display: block;\n margin-top: 6px;\n }\n`;\n\n/* Title row for the reveal dialog: heading on the left, X close on the right\n (the app's Use Token dialog pattern). Applied via className since\n Dialog.Title doesn't accept inline style. */\nconst StyledRevealTitle = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n\n .lc-close svg {\n fill: var(--color-theme-600);\n }\n`;\n\nexport interface CreateLoginCodeDialogsProps {\n open: boolean;\n onClose: () => void;\n /** Target user's full name (drives the dialog copy). */\n userName: string;\n}\n\n/**\n * Owner-minted login code flow (task #18): password gate first, then the\n * one-time reveal. The reveal has no footer — an X in the title closes it —\n * mirroring the app's Use Token dialog.\n */\nexport const CreateLoginCodeDialogs = ({\n open,\n onClose,\n userName,\n}: CreateLoginCodeDialogsProps): ReactElement => {\n const firstName = useMemo(\n () => userName.split(\" \")[0] || userName,\n [userName]\n );\n\n const [password, setPassword] = useState(\"\");\n const [attempted, setAttempted] = useState(false);\n const [revealOpen, setRevealOpen] = useState(false);\n // Expiry copy: computed as \"now + 10 min\" at the moment the code is minted.\n const [expiry, setExpiry] = useState(\"\");\n\n const [copyOpen, setCopyOpen] = useState(false);\n const [copyKey, setCopyKey] = useState(0);\n\n useEffect(() => {\n if (open) {\n setPassword(\"\");\n setAttempted(false);\n }\n }, [open]);\n\n const passwordInvalid = attempted && password.trim() === \"\";\n\n const handleConfirm = (): void => {\n if (password.trim() === \"\") {\n setAttempted(true);\n return;\n }\n const when = new Date(Date.now() + 10 * 60000);\n const hh = String(when.getHours()).padStart(2, \"0\");\n const mm = String(when.getMinutes()).padStart(2, \"0\");\n setExpiry(`${hh}:${mm}`);\n onClose();\n setRevealOpen(true);\n };\n\n const handleCopy = (): void => {\n setCopyOpen(true);\n setCopyKey((k) => k + 1);\n };\n\n return (\n <>\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Confirm Password</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledGateBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n You're about to create a one-time login code for {userName}.\n Any code they already had pending will be replaced.\n </Body2>\n <div className=\"pg-field\">\n <Label htmlFor=\"login-code-password\">Your Password</Label>\n <InputPassword\n id=\"login-code-password\"\n wrapperClassName=\"pg-input\"\n value={password}\n onChange={asInputChange((value) => {\n setPassword(value);\n setAttempted(false);\n })}\n invalid={passwordInvalid}\n errorMessage={\n passwordInvalid ? \"Your password is required.\" : undefined\n }\n autoFocus\n autoComplete=\"current-password\"\n />\n </div>\n </StyledGateBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n onClick={handleConfirm}\n >\n Confirm\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <Dialog open={revealOpen} onClose={() => setRevealOpen(false)}>\n <Dialog.Title disableDefaultHeading>\n <StyledRevealTitle>\n <Header3>One-Time Login Code</Header3>\n <IconButton\n variant=\"text gray\"\n className=\"lc-close\"\n onClick={() => setRevealOpen(false)}\n >\n <CancelCrossIcon />\n </IconButton>\n </StyledRevealTitle>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledCodeRow>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n Share this code with {firstName} through a secure channel.\n They'll still need their password to log in, the code alone\n won't work.\n </Body2>\n <div>\n <Label className=\"lc-label\">Login Code</Label>\n <div className=\"lc-code-field\">\n <span className=\"lc-code\">{SAMPLE_LOGIN_CODE}</span>\n <Tooltip title=\"Copy code\">\n <IconButton\n variant=\"text gray\"\n className=\"lc-copy\"\n onClick={handleCopy}\n >\n <CopyIcon />\n </IconButton>\n </Tooltip>\n </div>\n <Caption1 color=\"tertiary\" className=\"lc-caption\">\n Expires at {expiry} (in 10 minutes), it can't be shown\n again.\n </Caption1>\n </div>\n <InfoBox\n type=\"default\"\n showIcon\n title={`${firstName} has been notified`}\n >\n <Body2 color=\"secondary\">\n They received an email saying you created this code for their\n account. The email doesn't include the code.\n </Body2>\n </InfoBox>\n </StyledCodeRow>\n </Dialog.Content>\n </Dialog>\n\n <CopyToast\n open={copyOpen}\n toastKey={copyKey}\n text=\"Login code copied to clipboard.\"\n onClose={() => setCopyOpen(false)}\n />\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TwoFactorDialogs.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Dialog","_IconButton","_Icons","_InfoBox","_Input","_Label","_Loaders","_ToastMessage","_Tooltip","_Transitions","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","SANS","MONO","asInputChange","fn","SAMPLE_BACKUP_CODES","SAMPLE_LOGIN_CODE","StyledToastAnchor","styled","div","withConfig","displayName","componentId","CopyToast","_ref","open","toastKey","text","onClose","createElement","SlideFromTop","in","ToastMessage","key","className","type","dismissible","dropShadow","timeout","StyledGateBody","BackupCodesDialogs","exports","_ref2","_useState","useState","_useState2","password","setPassword","_useState3","_useState4","attempted","setAttempted","_useState5","_useState6","revealOpen","setRevealOpen","_useState7","_useState8","loading","setLoading","_useState9","_useState0","copyOpen","setCopyOpen","_useState1","_useState10","copyKey","setCopyKey","useEffect","undefined","timer","window","setTimeout","clearTimeout","passwordInvalid","trim","handleConfirm","handleCopy","k","closeReveal","Fragment","Dialog","disableCloseOnEsc","Title","ContentDivider","Content","Body2","color","lineHeight","Label","htmlFor","InputPassword","id","wrapperClassName","onChange","invalid","errorMessage","autoFocus","autoComplete","Actions","Button","variant","onClick","BackupCodesRevealDialog","onCopy","StyledRevealBody","_ref3","map","_","index","SkeletonLoader","code","InfoBox","showIcon","title","disabled","StyledCodeRow","StyledRevealTitle","CreateLoginCodeDialogs","_ref4","userName","firstName","useMemo","split","_useState11","_useState12","_useState13","_useState14","_useState15","_useState16","_useState17","_useState18","expiry","setExpiry","_useState19","_useState20","_useState21","_useState22","when","Date","now","hh","String","getHours","padStart","mm","getMinutes","concat","disableDefaultHeading","Header3","IconButton","CancelCrossIcon","Tooltip","CopyIcon","Caption1"],"sources":["../../../../src/presentation/shared/TwoFactorDialogs.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { CancelCrossIcon, CopyIcon } from \"../../components/Icons\";\nimport { InfoBox } from \"../../components/InfoBox\";\nimport { InputPassword } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { ToastMessage } from \"../../components/ToastMessage\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { SlideFromTop } from \"../../components/Transitions\";\nimport { Body2, Caption1, Header3 } from \"../../components/Typography\";\n\n/**\n * Self-hosted 2FA dialogs shared by the People stories (Users list + User\n * profile). Two flows, both reached from the user three-dot menu and both\n * gated (in the menu) behind the self-hosted + 2FA-enabled guard:\n *\n * - **Backup Codes** (own account, `self` menu): a single dialog that both\n * explains the destructive regenerate and takes the password (identity\n * confirmation is \"valid password + submit\", no separate confirm step).\n * Submitting opens the reveal dialog, which shows a skeleton while the new\n * set \"loads\", then the 10 codes once.\n * - **Create Login Code** (another user, `member`/`client` menu): an owner\n * re-enters their own password, then a one-time code is revealed once with\n * its expiry and a \"user notified\" note. (Task #18.)\n *\n * Everything is mocked locally: passwords aren't checked, the \"load\" is a\n * timer, and the codes are static samples.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\nconst MONO =\n '\"SF Mono\", \"Roboto Mono\", Menlo, Consolas, \"Courier New\", monospace';\n\n/**\n * DS `InputPassword` calls `onChange` with the string value at runtime, but its\n * type is still inherited from the native input (`ChangeEventHandler`). Adapt a\n * string handler so TypeScript is satisfied without lying about the value.\n */\nconst asInputChange = (\n fn: (value: string) => void\n): React.ChangeEventHandler<HTMLInputElement> =>\n fn as unknown as React.ChangeEventHandler<HTMLInputElement>;\n\n/* Sample codes (10+10 A-Z0-9), mirroring the real generator's format. */\nconst SAMPLE_BACKUP_CODES = [\n \"4K7Q9ZM2XN-8V3TJRD6WP\",\n \"P2W8XK4M9Q-3RJ7VND5TZ\",\n \"9ZM2XN4K7Q-6WP8V3TJRD\",\n \"TJRD6WP8V3-2XN4K7Q9ZM\",\n \"V3TJRD6WP8-K7Q9ZM2XN4\",\n \"8V3TJRD6WP-Q9ZM2XN4K7\",\n \"RD5TZP2W8X-M9Q3RJ7VND\",\n \"3RJ7VND5TZ-8XK4M9QP2W\",\n \"N4K7Q9ZM2X-6WP8V3TJRD\",\n \"Q9ZM2XN4K7-8V3TJRD6WP\",\n];\n\nconst SAMPLE_LOGIN_CODE = \"4K7Q9ZM2XN-8V3TJRD6WP\";\n\n/* ------------------------------------------------------------------ */\n/* Toast (reuses the fixed upper-right anchor pattern from headers) */\n/* ------------------------------------------------------------------ */\n\nconst StyledToastAnchor = styled.div`\n position: fixed;\n top: 16px;\n right: 16px;\n z-index: 10000;\n pointer-events: none;\n\n .c-toast-message {\n pointer-events: auto;\n }\n`;\n\ninterface CopyToastProps {\n open: boolean;\n toastKey: number;\n text: string;\n onClose: () => void;\n}\n\nconst CopyToast = ({\n open,\n toastKey,\n text,\n onClose,\n}: CopyToastProps): ReactElement => (\n <StyledToastAnchor>\n <SlideFromTop in={open}>\n <ToastMessage\n key={toastKey}\n className=\"c-toast-message\"\n type=\"success\"\n text={text}\n dismissible\n dropShadow\n timeout={3000}\n onClose={onClose}\n />\n </SlideFromTop>\n </StyledToastAnchor>\n);\n\n/* ------------------------------------------------------------------ */\n/* Shared password-gate body (describe + password in one dialog) */\n/* ------------------------------------------------------------------ */\n\nconst StyledGateBody = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .pg-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n /* DS InputPassword wrapper is fixed-width — fill the dialog. */\n .pg-input.c-input-wrapper,\n .pg-input {\n width: 100%;\n max-width: none;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Backup Codes — combined describe + password dialog */\n/* ------------------------------------------------------------------ */\n\nexport interface BackupCodesDialogsProps {\n open: boolean;\n onClose: () => void;\n}\n\n/**\n * The full Backup Codes flow: the combined regenerate/password dialog, then the\n * one-time reveal dialog with its loading skeleton. Cancelling the first dialog\n * is a pure no-op — no codes are issued, no toast.\n */\nexport const BackupCodesDialogs = ({\n open,\n onClose,\n}: BackupCodesDialogsProps): ReactElement => {\n const [password, setPassword] = useState(\"\");\n const [attempted, setAttempted] = useState(false);\n const [revealOpen, setRevealOpen] = useState(false);\n const [loading, setLoading] = useState(true);\n\n const [copyOpen, setCopyOpen] = useState(false);\n const [copyKey, setCopyKey] = useState(0);\n\n // Reset the gate each time it (re)opens.\n useEffect(() => {\n if (open) {\n setPassword(\"\");\n setAttempted(false);\n }\n }, [open]);\n\n // Simulate the API generating the new set: a ~1s skeleton on reveal.\n useEffect(() => {\n if (!revealOpen) {\n return undefined;\n }\n setLoading(true);\n const timer = window.setTimeout(() => setLoading(false), 1100);\n return () => window.clearTimeout(timer);\n }, [revealOpen]);\n\n const passwordInvalid = attempted && password.trim() === \"\";\n\n const handleConfirm = (): void => {\n if (password.trim() === \"\") {\n setAttempted(true);\n return;\n }\n // Valid password + submit is all the confirmation we need: close the gate\n // and open the reveal (which regenerates the set).\n onClose();\n setRevealOpen(true);\n };\n\n const handleCopy = (): void => {\n setCopyOpen(true);\n setCopyKey((k) => k + 1);\n };\n\n const closeReveal = (): void => {\n setRevealOpen(false);\n };\n\n return (\n <>\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Regenerate Backup Codes</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledGateBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n This drops all of your existing backup codes and creates a new set\n of 10. Any codes you saved before will stop working. The new codes\n are shown only once. Enter your password to confirm it's you.\n </Body2>\n <div className=\"pg-field\">\n <Label htmlFor=\"backup-codes-password\">Your Password</Label>\n <InputPassword\n id=\"backup-codes-password\"\n wrapperClassName=\"pg-input\"\n value={password}\n onChange={asInputChange((value) => {\n setPassword(value);\n setAttempted(false);\n })}\n invalid={passwordInvalid}\n errorMessage={\n passwordInvalid ? \"Your password is required.\" : undefined\n }\n autoFocus\n autoComplete=\"current-password\"\n />\n </div>\n </StyledGateBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={handleConfirm}>\n Regenerate Codes\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <BackupCodesRevealDialog\n open={revealOpen}\n loading={loading}\n onClose={closeReveal}\n onCopy={handleCopy}\n />\n\n <CopyToast\n open={copyOpen}\n toastKey={copyKey}\n text=\"Backup codes copied to clipboard.\"\n onClose={() => setCopyOpen(false)}\n />\n </>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Backup Codes — one-time reveal (skeleton while loading) */\n/* ------------------------------------------------------------------ */\n\nconst StyledRevealBody = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .bc-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px 16px;\n }\n\n .bc-code {\n font-family: ${MONO};\n font-size: 14px;\n letter-spacing: 0.5px;\n color: var(--color-theme-900);\n padding: 6px 10px;\n border-radius: 6px;\n background-color: var(--color-theme-200);\n text-align: center;\n }\n\n .bc-skeleton {\n height: 32px;\n border-radius: 6px;\n width: 100%;\n }\n`;\n\ninterface BackupCodesRevealDialogProps {\n open: boolean;\n loading: boolean;\n onClose: () => void;\n onCopy: () => void;\n}\n\nconst BackupCodesRevealDialog = ({\n open,\n loading,\n onClose,\n onCopy,\n}: BackupCodesRevealDialogProps): ReactElement => (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Your Backup Codes</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledRevealBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n Use a backup code to log in when email isn't available. Each code\n works once.\n </Body2>\n <div className=\"bc-grid\">\n {loading\n ? [...Array(10)].map((_, index) => (\n <SkeletonLoader key={index} className=\"bc-skeleton\" />\n ))\n : SAMPLE_BACKUP_CODES.map((code) => (\n <div key={code} className=\"bc-code\">\n {code}\n </div>\n ))}\n </div>\n <InfoBox type=\"note\" showIcon title=\"Codes are shown only once\">\n <Body2 color=\"secondary\">\n Save them somewhere safe, they can't be displayed again. You\n can generate a new set from your profile at any time.\n </Body2>\n </InfoBox>\n </StyledRevealBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={onClose} disabled={loading}>\n I've Saved My Codes\n </Button>\n <Button variant=\"secondary\" onClick={onCopy} disabled={loading}>\n Copy Codes\n </Button>\n </Dialog.Actions>\n </Dialog>\n);\n\n/* ------------------------------------------------------------------ */\n/* Create Login Code — password gate + one-time reveal */\n/* ------------------------------------------------------------------ */\n\nconst StyledCodeRow = styled.div`\n font-family: ${SANS};\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n .lc-label {\n display: block;\n margin-bottom: 6px;\n }\n\n .lc-code-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n background-color: var(--color-theme-200);\n }\n\n .lc-code {\n font-family: ${MONO};\n font-size: 15px;\n letter-spacing: 0.5px;\n color: var(--color-theme-900);\n flex: 1 1 auto;\n }\n\n .lc-copy svg {\n fill: var(--color-theme-600);\n }\n\n .lc-caption {\n display: block;\n margin-top: 6px;\n }\n`;\n\n/* Title row for the reveal dialog: heading on the left, X close on the right\n (the app's Use Token dialog pattern). Applied via className since\n Dialog.Title doesn't accept inline style. */\nconst StyledRevealTitle = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n\n .lc-close svg {\n fill: var(--color-theme-600);\n }\n`;\n\nexport interface CreateLoginCodeDialogsProps {\n open: boolean;\n onClose: () => void;\n /** Target user's full name (drives the dialog copy). */\n userName: string;\n}\n\n/**\n * Owner-minted login code flow (task #18): password gate first, then the\n * one-time reveal. The reveal has no footer — an X in the title closes it —\n * mirroring the app's Use Token dialog.\n */\nexport const CreateLoginCodeDialogs = ({\n open,\n onClose,\n userName,\n}: CreateLoginCodeDialogsProps): ReactElement => {\n const firstName = useMemo(\n () => userName.split(\" \")[0] || userName,\n [userName]\n );\n\n const [password, setPassword] = useState(\"\");\n const [attempted, setAttempted] = useState(false);\n const [revealOpen, setRevealOpen] = useState(false);\n // Expiry copy: computed as \"now + 10 min\" at the moment the code is minted.\n const [expiry, setExpiry] = useState(\"\");\n\n const [copyOpen, setCopyOpen] = useState(false);\n const [copyKey, setCopyKey] = useState(0);\n\n useEffect(() => {\n if (open) {\n setPassword(\"\");\n setAttempted(false);\n }\n }, [open]);\n\n const passwordInvalid = attempted && password.trim() === \"\";\n\n const handleConfirm = (): void => {\n if (password.trim() === \"\") {\n setAttempted(true);\n return;\n }\n const when = new Date(Date.now() + 10 * 60000);\n const hh = String(when.getHours()).padStart(2, \"0\");\n const mm = String(when.getMinutes()).padStart(2, \"0\");\n setExpiry(`${hh}:${mm}`);\n onClose();\n setRevealOpen(true);\n };\n\n const handleCopy = (): void => {\n setCopyOpen(true);\n setCopyKey((k) => k + 1);\n };\n\n return (\n <>\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Confirm Password</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledGateBody>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n You're about to create a one-time login code for {userName}.\n Any code they already had pending will be replaced.\n </Body2>\n <div className=\"pg-field\">\n <Label htmlFor=\"login-code-password\">Your Password</Label>\n <InputPassword\n id=\"login-code-password\"\n wrapperClassName=\"pg-input\"\n value={password}\n onChange={asInputChange((value) => {\n setPassword(value);\n setAttempted(false);\n })}\n invalid={passwordInvalid}\n errorMessage={\n passwordInvalid ? \"Your password is required.\" : undefined\n }\n autoFocus\n autoComplete=\"current-password\"\n />\n </div>\n </StyledGateBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={handleConfirm}>\n Confirm\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <Dialog open={revealOpen} onClose={() => setRevealOpen(false)}>\n <Dialog.Title disableDefaultHeading>\n <StyledRevealTitle>\n <Header3>One-Time Login Code</Header3>\n <IconButton\n variant=\"text gray\"\n className=\"lc-close\"\n onClick={() => setRevealOpen(false)}\n >\n <CancelCrossIcon />\n </IconButton>\n </StyledRevealTitle>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledCodeRow>\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n Share this code with {firstName} through a secure channel.\n They'll still need their password to log in, the code alone\n won't work.\n </Body2>\n <div>\n <Label className=\"lc-label\">Login Code</Label>\n <div className=\"lc-code-field\">\n <span className=\"lc-code\">{SAMPLE_LOGIN_CODE}</span>\n <Tooltip title=\"Copy code\">\n <IconButton\n variant=\"text gray\"\n className=\"lc-copy\"\n onClick={handleCopy}\n >\n <CopyIcon />\n </IconButton>\n </Tooltip>\n </div>\n <Caption1 color=\"tertiary\" className=\"lc-caption\">\n Expires at {expiry} (in 10 minutes), it can't be shown\n again.\n </Caption1>\n </div>\n <InfoBox\n type=\"default\"\n showIcon\n title={`${firstName} has been notified`}\n >\n <Body2 color=\"secondary\">\n They received an email saying you created this code for their\n account. The email doesn't include the code.\n </Body2>\n </InfoBox>\n </StyledCodeRow>\n </Dialog.Content>\n </Dialog>\n\n <CopyToast\n open={copyOpen}\n toastKey={copyKey}\n text=\"Login code copied to clipboard.\"\n onClose={() => setCopyOpen(false)}\n />\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectRepositoryDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/ConnectRepositoryDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,YAAY,EAKb,MAAM,OAAO,CAAC;AA8Bf,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,4EAA4E;AAC5E,eAAO,MAAM,YAAY,GAAI,SAAS,iBAAiB,KAAG,MACd,CAAC;AAE7C,+EAA+E;AAC/E,eAAO,MAAM,cAAc,GAAI,UAAU,iBAAiB,KAAG,YAQ5D,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,UAAU,EAGnC,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,UAAU,EAQ5C,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,UAAU,EAahD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,UAAU,EAAE,EAC1B,aAAa,UAAU,EAAE;;;;;;;;GAgBsB,CAAC;AAwBlD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAAI,qFAQ9B,qBAAqB,KAAG,YA8C1B,CAAC;AAwBF,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mEAAmE;IACnE,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,iFAAiF;IACjF,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,uBAAuB,GAAI,0DAMrC,4BAA4B,KAAG,
|
|
1
|
+
{"version":3,"file":"ConnectRepositoryDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/ConnectRepositoryDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,YAAY,EAKb,MAAM,OAAO,CAAC;AA8Bf,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,4EAA4E;AAC5E,eAAO,MAAM,YAAY,GAAI,SAAS,iBAAiB,KAAG,MACd,CAAC;AAE7C,+EAA+E;AAC/E,eAAO,MAAM,cAAc,GAAI,UAAU,iBAAiB,KAAG,YAQ5D,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,UAAU,EAGnC,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,UAAU,EAQ5C,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,UAAU,EAahD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,UAAU,EAAE,EAC1B,aAAa,UAAU,EAAE;;;;;;;;GAgBsB,CAAC;AAwBlD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAAI,qFAQ9B,qBAAqB,KAAG,YA8C1B,CAAC;AAwBF,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mEAAmE;IACnE,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,iFAAiF;IACjF,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,uBAAuB,GAAI,0DAMrC,4BAA4B,KAAG,YAwEjC,CAAC"}
|
|
@@ -231,9 +231,6 @@ export const ConnectRepositoryDialog = _ref2 => {
|
|
|
231
231
|
color: "tertiary"
|
|
232
232
|
}, "Issues from this repository will create and update tasks in this project."))), /*#__PURE__*/React.createElement(Dialog.ContentDivider, null), /*#__PURE__*/React.createElement(Dialog.Actions, null, /*#__PURE__*/React.createElement(Button, {
|
|
233
233
|
variant: "primary",
|
|
234
|
-
style: {
|
|
235
|
-
marginRight: 12
|
|
236
|
-
},
|
|
237
234
|
onClick: handleConnect
|
|
238
235
|
}, "Connect"), /*#__PURE__*/React.createElement(Button, {
|
|
239
236
|
variant: "secondary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectRepositoryDialog.js","names":["React","useCallback","useEffect","useRef","useState","styled","createGlobalStyle","Button","Checkbox","Dialog","GitHubIcon","GitIcon","GitLabIcon","Label","Select","SelectTrigger","Body2","SANS","serviceLabel","service","connectionIcon","createElement","CONNECTIONS","id","name","PROJECT_REPOSITORIES","connectionId","CONNECTABLE_REPOSITORIES","buildRepoOptions","repositories","connections","map","c","options","filter","r","sort","a","b","localeCompare","icon","group","length","RepoMenuGlobalStyle","p","$cls","$w","RepoSelectWrap","div","withConfig","displayName","componentId","RepositorySelect","_ref","_repositories$find$na","_repositories$find","selected","onChange","invalid","_ref$placeholder","placeholder","className","wrapRef","_useState","menuWidth","setMenuWidth","_useState2","Math","random","toString","slice","menuCls","measure","current","offsetWidth","selectedName","find","ref","undefined","v","String","selectClassName","onSelectOpen","forceCloseMenu","target","typographyProps","color","StyledConnectBody","ConnectRepositoryDialog","_ref2","open","onClose","onConnect","_ref2$repositories","_ref2$connections","_useState3","setSelected","_useState4","issueSync","setIssueSync","_useState5","attempted","setAttempted","handleConnect","repo","disableCloseOnEsc","Title","ContentDivider","Content","size","checked","e","htmlFor","weight","Actions","variant","style","marginRight","onClick"],"sources":["../../../../src/presentation/shared/ConnectRepositoryDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { GitHubIcon, GitIcon, GitLabIcon } from \"../../components/Icons\";\nimport { Label } from \"../../components/Label\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Body2 } from \"../../components/Typography\";\n\n/**\n * \"Connect Repository\" — the project-side counterpart to the \"Connect Project\"\n * dialog on the Repositories page (Apps & Integrations). Same operation from\n * the other end: pick a repository, choose which features to enable, and make\n * the connection. Built as a shared component because more than one story links\n * a repository this way.\n *\n * Also exports `RepositorySelect`, the grouped repository picker (repositories\n * grouped under their connection name, everything sorted by name, filterable\n * via the built-in search) reused wherever a repository is chosen.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/* ---- Data model + mock data ----------------------------------------- */\n\nexport type ConnectionService = \"github\" | \"gitlab\";\n\nexport interface Connection {\n id: string;\n /** Org / group name, e.g. \"ActiveCollab\" or \"a51-ops\". */\n name: string;\n service: ConnectionService;\n}\n\n/** Human-readable provider label used in the group header \"name (type)\". */\nexport const serviceLabel = (service: ConnectionService): string =>\n service === \"github\" ? \"GitHub\" : \"GitLab\";\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nexport const connectionIcon = (service?: ConnectionService): ReactElement => {\n if (service === \"github\") {\n return <GitHubIcon />;\n }\n if (service === \"gitlab\") {\n return <GitLabIcon />;\n }\n return <GitIcon />;\n};\n\nexport interface Repository {\n id: string;\n /** Full repository path, e.g. activecollab/backend. */\n name: string;\n connectionId: string;\n}\n\nexport const CONNECTIONS: Connection[] = [\n { id: \"gh-ac\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gl-ops\", name: \"a51-ops\", service: \"gitlab\" },\n];\n\n/** Repositories already connected to the project (shown in link pickers). */\nexport const PROJECT_REPOSITORIES: Repository[] = [\n { id: \"backend\", name: \"activecollab/backend\", connectionId: \"gh-ac\" },\n { id: \"frontend\", name: \"activecollab/frontend\", connectionId: \"gh-ac\" },\n {\n id: \"infra\",\n name: \"activecollab/infrastructure\",\n connectionId: \"gl-ops\",\n },\n];\n\n/** Repositories available to connect (not yet linked to the project). */\nexport const CONNECTABLE_REPOSITORIES: Repository[] = [\n { id: \"mobile\", name: \"activecollab/mobile\", connectionId: \"gh-ac\" },\n {\n id: \"design-system\",\n name: \"activecollab/design-system\",\n connectionId: \"gh-ac\",\n },\n {\n id: \"deploy-scripts\",\n name: \"a51-ops/deploy-scripts\",\n connectionId: \"gl-ops\",\n },\n { id: \"runners\", name: \"a51-ops/ci-runners\", connectionId: \"gl-ops\" },\n];\n\n/**\n * Build grouped Select options — groups and options both sorted by name. Each\n * repository option carries a leading provider icon (GitHub / GitLab / Git) via\n * the Select's `icon` slot; the group header is just the connection name, since\n * the icon now conveys the service (no \"(GitHub)\" / \"(GitLab)\" suffix).\n */\nexport const buildRepoOptions = (\n repositories: Repository[],\n connections: Connection[]\n) =>\n [...connections]\n .map((c) => ({\n id: c.id,\n name: c.name,\n options: repositories\n .filter((r) => r.connectionId === c.id)\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((r) => ({\n id: r.id,\n name: r.name,\n icon: connectionIcon(c.service),\n })),\n }))\n .filter((group) => group.options.length > 0)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n/* ---- RepositorySelect ------------------------------------------------ */\n\n/**\n * The grouped repository menu renders through a portal, so the \"match the\n * trigger width\" override has to be global, scoped to this instance's class.\n */\nconst RepoMenuGlobalStyle = createGlobalStyle<{ $cls: string; $w?: number }>`\n .c-select.${(p) => p.$cls} {\n ${(p) =>\n p.$w ? `width: ${p.$w}px !important; max-width: none !important;` : \"\"}\n }\n`;\n\nconst RepoSelectWrap = styled.div`\n font-family: ${SANS};\n\n .repo-trigger {\n width: 100%;\n max-width: none;\n }\n`;\n\nexport interface RepositorySelectProps {\n repositories: Repository[];\n connections: Connection[];\n selected: string | null;\n onChange: (id: string) => void;\n invalid?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nexport const RepositorySelect = ({\n repositories,\n connections,\n selected,\n onChange,\n invalid,\n placeholder = \"Choose repository\",\n className,\n}: RepositorySelectProps): ReactElement => {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n const [menuCls] = useState(\n () => `repo-select-menu-${Math.random().toString(36).slice(2)}`\n );\n\n const measure = useCallback(() => {\n if (wrapRef.current) {\n setMenuWidth(wrapRef.current.offsetWidth);\n }\n }, []);\n\n useEffect(() => {\n measure();\n }, [measure]);\n\n const options = buildRepoOptions(repositories, connections);\n const selectedName =\n repositories.find((r) => r.id === selected)?.name ?? placeholder;\n\n return (\n <RepoSelectWrap ref={wrapRef} className={className}>\n <RepoMenuGlobalStyle $cls={menuCls} $w={menuWidth} />\n <Select\n options={options}\n selected={selected === null ? undefined : selected}\n onChange={(v) => onChange(String(v))}\n placeholder=\"Search repositories\"\n selectClassName={menuCls}\n onSelectOpen={measure}\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"repo-trigger\"\n invalid={invalid}\n typographyProps={\n selected === null ? { color: \"tertiary\" } : undefined\n }\n >\n {selectedName}\n </SelectTrigger>\n }\n />\n </RepoSelectWrap>\n );\n};\n\n/* ---- ConnectRepositoryDialog ---------------------------------------- */\n\nconst StyledConnectBody = styled.div`\n font-family: ${SANS};\n\n .cr-field {\n margin-bottom: 16px;\n }\n .cr-label {\n display: block;\n margin-bottom: 6px;\n }\n .cr-check {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .cr-check-hint {\n margin-top: 6px;\n }\n`;\n\nexport interface ConnectRepositoryDialogProps {\n open: boolean;\n onClose: () => void;\n /** Called with the connected repository when the user confirms. */\n onConnect: (repository: Repository) => void;\n /** Repositories that can be connected (defaults to the mock connectable set). */\n repositories?: Repository[];\n connections?: Connection[];\n}\n\nexport const ConnectRepositoryDialog = ({\n open,\n onClose,\n onConnect,\n repositories = CONNECTABLE_REPOSITORIES,\n connections = CONNECTIONS,\n}: ConnectRepositoryDialogProps): ReactElement => {\n const [selected, setSelected] = useState<string | null>(null);\n const [issueSync, setIssueSync] = useState(false);\n const [attempted, setAttempted] = useState(false);\n\n // Reset the form each time the dialog opens.\n useEffect(() => {\n if (open) {\n setSelected(null);\n setIssueSync(false);\n setAttempted(false);\n }\n }, [open]);\n\n const invalid = attempted && selected === null;\n\n const handleConnect = () => {\n const repo = repositories.find((r) => r.id === selected);\n if (!repo) {\n setAttempted(true);\n return;\n }\n onConnect(repo);\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Connect Repository</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledConnectBody>\n <div className=\"cr-field\">\n <Label size=\"small\" className=\"cr-label\" invalid={invalid}>\n Repository\n </Label>\n <RepositorySelect\n repositories={repositories}\n connections={connections}\n selected={selected}\n onChange={setSelected}\n invalid={invalid}\n />\n </div>\n\n <div className=\"cr-check\">\n <Checkbox\n id=\"cr-issue-sync\"\n checked={issueSync}\n onChange={(e) => setIssueSync(e.target.checked)}\n />\n <Label htmlFor=\"cr-issue-sync\" weight=\"regular\">\n Enable issue sync\n </Label>\n </div>\n <Body2 className=\"cr-check-hint\" color=\"tertiary\">\n Issues from this repository will create and update tasks in this\n project.\n </Body2>\n </StyledConnectBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n onClick={handleConnect}\n >\n Connect\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ConnectRepositoryDialog.js","names":["React","useCallback","useEffect","useRef","useState","styled","createGlobalStyle","Button","Checkbox","Dialog","GitHubIcon","GitIcon","GitLabIcon","Label","Select","SelectTrigger","Body2","SANS","serviceLabel","service","connectionIcon","createElement","CONNECTIONS","id","name","PROJECT_REPOSITORIES","connectionId","CONNECTABLE_REPOSITORIES","buildRepoOptions","repositories","connections","map","c","options","filter","r","sort","a","b","localeCompare","icon","group","length","RepoMenuGlobalStyle","p","$cls","$w","RepoSelectWrap","div","withConfig","displayName","componentId","RepositorySelect","_ref","_repositories$find$na","_repositories$find","selected","onChange","invalid","_ref$placeholder","placeholder","className","wrapRef","_useState","menuWidth","setMenuWidth","_useState2","Math","random","toString","slice","menuCls","measure","current","offsetWidth","selectedName","find","ref","undefined","v","String","selectClassName","onSelectOpen","forceCloseMenu","target","typographyProps","color","StyledConnectBody","ConnectRepositoryDialog","_ref2","open","onClose","onConnect","_ref2$repositories","_ref2$connections","_useState3","setSelected","_useState4","issueSync","setIssueSync","_useState5","attempted","setAttempted","handleConnect","repo","disableCloseOnEsc","Title","ContentDivider","Content","size","checked","e","htmlFor","weight","Actions","variant","onClick"],"sources":["../../../../src/presentation/shared/ConnectRepositoryDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { GitHubIcon, GitIcon, GitLabIcon } from \"../../components/Icons\";\nimport { Label } from \"../../components/Label\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Body2 } from \"../../components/Typography\";\n\n/**\n * \"Connect Repository\" — the project-side counterpart to the \"Connect Project\"\n * dialog on the Repositories page (Apps & Integrations). Same operation from\n * the other end: pick a repository, choose which features to enable, and make\n * the connection. Built as a shared component because more than one story links\n * a repository this way.\n *\n * Also exports `RepositorySelect`, the grouped repository picker (repositories\n * grouped under their connection name, everything sorted by name, filterable\n * via the built-in search) reused wherever a repository is chosen.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/* ---- Data model + mock data ----------------------------------------- */\n\nexport type ConnectionService = \"github\" | \"gitlab\";\n\nexport interface Connection {\n id: string;\n /** Org / group name, e.g. \"ActiveCollab\" or \"a51-ops\". */\n name: string;\n service: ConnectionService;\n}\n\n/** Human-readable provider label used in the group header \"name (type)\". */\nexport const serviceLabel = (service: ConnectionService): string =>\n service === \"github\" ? \"GitHub\" : \"GitLab\";\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nexport const connectionIcon = (service?: ConnectionService): ReactElement => {\n if (service === \"github\") {\n return <GitHubIcon />;\n }\n if (service === \"gitlab\") {\n return <GitLabIcon />;\n }\n return <GitIcon />;\n};\n\nexport interface Repository {\n id: string;\n /** Full repository path, e.g. activecollab/backend. */\n name: string;\n connectionId: string;\n}\n\nexport const CONNECTIONS: Connection[] = [\n { id: \"gh-ac\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gl-ops\", name: \"a51-ops\", service: \"gitlab\" },\n];\n\n/** Repositories already connected to the project (shown in link pickers). */\nexport const PROJECT_REPOSITORIES: Repository[] = [\n { id: \"backend\", name: \"activecollab/backend\", connectionId: \"gh-ac\" },\n { id: \"frontend\", name: \"activecollab/frontend\", connectionId: \"gh-ac\" },\n {\n id: \"infra\",\n name: \"activecollab/infrastructure\",\n connectionId: \"gl-ops\",\n },\n];\n\n/** Repositories available to connect (not yet linked to the project). */\nexport const CONNECTABLE_REPOSITORIES: Repository[] = [\n { id: \"mobile\", name: \"activecollab/mobile\", connectionId: \"gh-ac\" },\n {\n id: \"design-system\",\n name: \"activecollab/design-system\",\n connectionId: \"gh-ac\",\n },\n {\n id: \"deploy-scripts\",\n name: \"a51-ops/deploy-scripts\",\n connectionId: \"gl-ops\",\n },\n { id: \"runners\", name: \"a51-ops/ci-runners\", connectionId: \"gl-ops\" },\n];\n\n/**\n * Build grouped Select options — groups and options both sorted by name. Each\n * repository option carries a leading provider icon (GitHub / GitLab / Git) via\n * the Select's `icon` slot; the group header is just the connection name, since\n * the icon now conveys the service (no \"(GitHub)\" / \"(GitLab)\" suffix).\n */\nexport const buildRepoOptions = (\n repositories: Repository[],\n connections: Connection[]\n) =>\n [...connections]\n .map((c) => ({\n id: c.id,\n name: c.name,\n options: repositories\n .filter((r) => r.connectionId === c.id)\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((r) => ({\n id: r.id,\n name: r.name,\n icon: connectionIcon(c.service),\n })),\n }))\n .filter((group) => group.options.length > 0)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n/* ---- RepositorySelect ------------------------------------------------ */\n\n/**\n * The grouped repository menu renders through a portal, so the \"match the\n * trigger width\" override has to be global, scoped to this instance's class.\n */\nconst RepoMenuGlobalStyle = createGlobalStyle<{ $cls: string; $w?: number }>`\n .c-select.${(p) => p.$cls} {\n ${(p) =>\n p.$w ? `width: ${p.$w}px !important; max-width: none !important;` : \"\"}\n }\n`;\n\nconst RepoSelectWrap = styled.div`\n font-family: ${SANS};\n\n .repo-trigger {\n width: 100%;\n max-width: none;\n }\n`;\n\nexport interface RepositorySelectProps {\n repositories: Repository[];\n connections: Connection[];\n selected: string | null;\n onChange: (id: string) => void;\n invalid?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nexport const RepositorySelect = ({\n repositories,\n connections,\n selected,\n onChange,\n invalid,\n placeholder = \"Choose repository\",\n className,\n}: RepositorySelectProps): ReactElement => {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n const [menuCls] = useState(\n () => `repo-select-menu-${Math.random().toString(36).slice(2)}`\n );\n\n const measure = useCallback(() => {\n if (wrapRef.current) {\n setMenuWidth(wrapRef.current.offsetWidth);\n }\n }, []);\n\n useEffect(() => {\n measure();\n }, [measure]);\n\n const options = buildRepoOptions(repositories, connections);\n const selectedName =\n repositories.find((r) => r.id === selected)?.name ?? placeholder;\n\n return (\n <RepoSelectWrap ref={wrapRef} className={className}>\n <RepoMenuGlobalStyle $cls={menuCls} $w={menuWidth} />\n <Select\n options={options}\n selected={selected === null ? undefined : selected}\n onChange={(v) => onChange(String(v))}\n placeholder=\"Search repositories\"\n selectClassName={menuCls}\n onSelectOpen={measure}\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"repo-trigger\"\n invalid={invalid}\n typographyProps={\n selected === null ? { color: \"tertiary\" } : undefined\n }\n >\n {selectedName}\n </SelectTrigger>\n }\n />\n </RepoSelectWrap>\n );\n};\n\n/* ---- ConnectRepositoryDialog ---------------------------------------- */\n\nconst StyledConnectBody = styled.div`\n font-family: ${SANS};\n\n .cr-field {\n margin-bottom: 16px;\n }\n .cr-label {\n display: block;\n margin-bottom: 6px;\n }\n .cr-check {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .cr-check-hint {\n margin-top: 6px;\n }\n`;\n\nexport interface ConnectRepositoryDialogProps {\n open: boolean;\n onClose: () => void;\n /** Called with the connected repository when the user confirms. */\n onConnect: (repository: Repository) => void;\n /** Repositories that can be connected (defaults to the mock connectable set). */\n repositories?: Repository[];\n connections?: Connection[];\n}\n\nexport const ConnectRepositoryDialog = ({\n open,\n onClose,\n onConnect,\n repositories = CONNECTABLE_REPOSITORIES,\n connections = CONNECTIONS,\n}: ConnectRepositoryDialogProps): ReactElement => {\n const [selected, setSelected] = useState<string | null>(null);\n const [issueSync, setIssueSync] = useState(false);\n const [attempted, setAttempted] = useState(false);\n\n // Reset the form each time the dialog opens.\n useEffect(() => {\n if (open) {\n setSelected(null);\n setIssueSync(false);\n setAttempted(false);\n }\n }, [open]);\n\n const invalid = attempted && selected === null;\n\n const handleConnect = () => {\n const repo = repositories.find((r) => r.id === selected);\n if (!repo) {\n setAttempted(true);\n return;\n }\n onConnect(repo);\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Connect Repository</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledConnectBody>\n <div className=\"cr-field\">\n <Label size=\"small\" className=\"cr-label\" invalid={invalid}>\n Repository\n </Label>\n <RepositorySelect\n repositories={repositories}\n connections={connections}\n selected={selected}\n onChange={setSelected}\n invalid={invalid}\n />\n </div>\n\n <div className=\"cr-check\">\n <Checkbox\n id=\"cr-issue-sync\"\n checked={issueSync}\n onChange={(e) => setIssueSync(e.target.checked)}\n />\n <Label htmlFor=\"cr-issue-sync\" weight=\"regular\">\n Enable issue sync\n </Label>\n </div>\n <Body2 className=\"cr-check-hint\" color=\"tertiary\">\n Issues from this repository will create and update tasks in this\n project.\n </Body2>\n </StyledConnectBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={handleConnect}>\n Connect\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,OAAOC,MAAM,IAAIC,iBAAiB,QAAQ,mBAAmB;AAE7D,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,UAAU,EAAEC,OAAO,EAAEC,UAAU,QAAQ,wBAAwB;AACxE,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,aAAa,QAAQ,gCAAgC;AAC9D,SAASC,KAAK,QAAQ,6BAA6B;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,IAAI,GACR,kFAAkF;;AAEpF;;AAWA;AACA,OAAO,MAAMC,YAAY,GAAIC,OAA0B,IACrDA,OAAO,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ;;AAE5C;AACA,OAAO,MAAMC,cAAc,GAAID,OAA2B,IAAmB;EAC3E,IAAIA,OAAO,KAAK,QAAQ,EAAE;IACxB,oBAAOnB,KAAA,CAAAqB,aAAA,CAACX,UAAU,MAAE,CAAC;EACvB;EACA,IAAIS,OAAO,KAAK,QAAQ,EAAE;IACxB,oBAAOnB,KAAA,CAAAqB,aAAA,CAACT,UAAU,MAAE,CAAC;EACvB;EACA,oBAAOZ,KAAA,CAAAqB,aAAA,CAACV,OAAO,MAAE,CAAC;AACpB,CAAC;AASD,OAAO,MAAMW,WAAyB,GAAG,CACvC;EAAEC,EAAE,EAAE,OAAO;EAAEC,IAAI,EAAE,cAAc;EAAEL,OAAO,EAAE;AAAS,CAAC,EACxD;EAAEI,EAAE,EAAE,QAAQ;EAAEC,IAAI,EAAE,SAAS;EAAEL,OAAO,EAAE;AAAS,CAAC,CACrD;;AAED;AACA,OAAO,MAAMM,oBAAkC,GAAG,CAChD;EAAEF,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE,sBAAsB;EAAEE,YAAY,EAAE;AAAQ,CAAC,EACtE;EAAEH,EAAE,EAAE,UAAU;EAAEC,IAAI,EAAE,uBAAuB;EAAEE,YAAY,EAAE;AAAQ,CAAC,EACxE;EACEH,EAAE,EAAE,OAAO;EACXC,IAAI,EAAE,6BAA6B;EACnCE,YAAY,EAAE;AAChB,CAAC,CACF;;AAED;AACA,OAAO,MAAMC,wBAAsC,GAAG,CACpD;EAAEJ,EAAE,EAAE,QAAQ;EAAEC,IAAI,EAAE,qBAAqB;EAAEE,YAAY,EAAE;AAAQ,CAAC,EACpE;EACEH,EAAE,EAAE,eAAe;EACnBC,IAAI,EAAE,4BAA4B;EAClCE,YAAY,EAAE;AAChB,CAAC,EACD;EACEH,EAAE,EAAE,gBAAgB;EACpBC,IAAI,EAAE,wBAAwB;EAC9BE,YAAY,EAAE;AAChB,CAAC,EACD;EAAEH,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE,oBAAoB;EAAEE,YAAY,EAAE;AAAS,CAAC,CACtE;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,gBAAgB,GAAGA,CAC9BC,YAA0B,EAC1BC,WAAyB,KAEzB,CAAC,GAAGA,WAAW,CAAC,CACbC,GAAG,CAAEC,CAAC,KAAM;EACXT,EAAE,EAAES,CAAC,CAACT,EAAE;EACRC,IAAI,EAAEQ,CAAC,CAACR,IAAI;EACZS,OAAO,EAAEJ,YAAY,CAClBK,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACT,YAAY,KAAKM,CAAC,CAACT,EAAE,CAAC,CACtCa,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACb,IAAI,CAACe,aAAa,CAACD,CAAC,CAACd,IAAI,CAAC,CAAC,CAC5CO,GAAG,CAAEI,CAAC,KAAM;IACXZ,EAAE,EAAEY,CAAC,CAACZ,EAAE;IACRC,IAAI,EAAEW,CAAC,CAACX,IAAI;IACZgB,IAAI,EAAEpB,cAAc,CAACY,CAAC,CAACb,OAAO;EAChC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC,CACFe,MAAM,CAAEO,KAAK,IAAKA,KAAK,CAACR,OAAO,CAACS,MAAM,GAAG,CAAC,CAAC,CAC3CN,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACb,IAAI,CAACe,aAAa,CAACD,CAAC,CAACd,IAAI,CAAC,CAAC;;AAEjD;;AAEA;AACA;AACA;AACA;AACA,MAAMmB,mBAAmB,GAAGrC,iBAAiB,2BAC9BsC,CAAC,IAAKA,CAAC,CAACC,IAAI,EACpBD,CAAC,IACFA,CAAC,CAACE,EAAE,eAAaF,CAAC,CAACE,EAAE,kDAA+C,EAAE,CAE3E;AAED,MAAMC,cAAc,GAAG1C,MAAM,CAAC2C,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,mEAChBlC,IAAI,CAMpB;AAYD,OAAO,MAAMmC,gBAAgB,GAAGC,IAAA,IAQW;EAAA,IAAAC,qBAAA,EAAAC,kBAAA;EAAA,IAPzC1B,YAAY,GAAAwB,IAAA,CAAZxB,YAAY;IACZC,WAAW,GAAAuB,IAAA,CAAXvB,WAAW;IACX0B,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IACRC,OAAO,GAAAL,IAAA,CAAPK,OAAO;IAAAC,gBAAA,GAAAN,IAAA,CACPO,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,mBAAmB,GAAAA,gBAAA;IACjCE,SAAS,GAAAR,IAAA,CAATQ,SAAS;EAET,MAAMC,OAAO,GAAG3D,MAAM,CAAiB,IAAI,CAAC;EAC5C,MAAA4D,SAAA,GAAkC3D,QAAQ,CAAqB,CAAC;IAAzD4D,SAAS,GAAAD,SAAA;IAAEE,YAAY,GAAAF,SAAA;EAC9B,MAAAG,UAAA,GAAkB9D,QAAQ,CACxB,4BAA0B+D,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAC9D,CAAC;IAFMC,OAAO,GAAAL,UAAA;EAId,MAAMM,OAAO,GAAGvE,WAAW,CAAC,MAAM;IAChC,IAAI6D,OAAO,CAACW,OAAO,EAAE;MACnBR,YAAY,CAACH,OAAO,CAACW,OAAO,CAACC,WAAW,CAAC;IAC3C;EACF,CAAC,EAAE,EAAE,CAAC;EAENxE,SAAS,CAAC,MAAM;IACdsE,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMvC,OAAO,GAAGL,gBAAgB,CAACC,YAAY,EAAEC,WAAW,CAAC;EAC3D,MAAM6C,YAAY,IAAArB,qBAAA,IAAAC,kBAAA,GAChB1B,YAAY,CAAC+C,IAAI,CAAEzC,CAAC,IAAKA,CAAC,CAACZ,EAAE,KAAKiC,QAAQ,CAAC,qBAA3CD,kBAAA,CAA6C/B,IAAI,YAAA8B,qBAAA,GAAIM,WAAW;EAElE,oBACE5D,KAAA,CAAAqB,aAAA,CAAC0B,cAAc;IAAC8B,GAAG,EAAEf,OAAQ;IAACD,SAAS,EAAEA;EAAU,gBACjD7D,KAAA,CAAAqB,aAAA,CAACsB,mBAAmB;IAACE,IAAI,EAAE0B,OAAQ;IAACzB,EAAE,EAAEkB;EAAU,CAAE,CAAC,eACrDhE,KAAA,CAAAqB,aAAA,CAACP,MAAM;IACLmB,OAAO,EAAEA,OAAQ;IACjBuB,QAAQ,EAAEA,QAAQ,KAAK,IAAI,GAAGsB,SAAS,GAAGtB,QAAS;IACnDC,QAAQ,EAAGsB,CAAC,IAAKtB,QAAQ,CAACuB,MAAM,CAACD,CAAC,CAAC,CAAE;IACrCnB,WAAW,EAAC,qBAAqB;IACjCqB,eAAe,EAAEV,OAAQ;IACzBW,YAAY,EAAEV,OAAQ;IACtBW,cAAc;IACdC,MAAM,eACJpF,KAAA,CAAAqB,aAAA,CAACN,aAAa;MACZ8C,SAAS,EAAC,cAAc;MACxBH,OAAO,EAAEA,OAAQ;MACjB2B,eAAe,EACb7B,QAAQ,KAAK,IAAI,GAAG;QAAE8B,KAAK,EAAE;MAAW,CAAC,GAAGR;IAC7C,GAEAH,YACY;EAChB,CACF,CACa,CAAC;AAErB,CAAC;;AAED;;AAEA,MAAMY,iBAAiB,GAAGlF,MAAM,CAAC2C,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,qLACnBlC,IAAI,CAiBpB;AAYD,OAAO,MAAMuE,uBAAuB,GAAGC,KAAA,IAMW;EAAA,IALhDC,IAAI,GAAAD,KAAA,CAAJC,IAAI;IACJC,OAAO,GAAAF,KAAA,CAAPE,OAAO;IACPC,SAAS,GAAAH,KAAA,CAATG,SAAS;IAAAC,kBAAA,GAAAJ,KAAA,CACT5D,YAAY;IAAZA,YAAY,GAAAgE,kBAAA,cAAGlE,wBAAwB,GAAAkE,kBAAA;IAAAC,iBAAA,GAAAL,KAAA,CACvC3D,WAAW;IAAXA,WAAW,GAAAgE,iBAAA,cAAGxE,WAAW,GAAAwE,iBAAA;EAEzB,MAAAC,UAAA,GAAgC3F,QAAQ,CAAgB,IAAI,CAAC;IAAtDoD,QAAQ,GAAAuC,UAAA;IAAEC,WAAW,GAAAD,UAAA;EAC5B,MAAAE,UAAA,GAAkC7F,QAAQ,CAAC,KAAK,CAAC;IAA1C8F,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAC9B,MAAAG,UAAA,GAAkChG,QAAQ,CAAC,KAAK,CAAC;IAA1CiG,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;;EAE9B;EACAlG,SAAS,CAAC,MAAM;IACd,IAAIwF,IAAI,EAAE;MACRM,WAAW,CAAC,IAAI,CAAC;MACjBG,YAAY,CAAC,KAAK,CAAC;MACnBG,YAAY,CAAC,KAAK,CAAC;IACrB;EACF,CAAC,EAAE,CAACZ,IAAI,CAAC,CAAC;EAEV,MAAMhC,OAAO,GAAG2C,SAAS,IAAI7C,QAAQ,KAAK,IAAI;EAE9C,MAAM+C,aAAa,GAAGA,CAAA,KAAM;IAC1B,MAAMC,IAAI,GAAG3E,YAAY,CAAC+C,IAAI,CAAEzC,CAAC,IAAKA,CAAC,CAACZ,EAAE,KAAKiC,QAAQ,CAAC;IACxD,IAAI,CAACgD,IAAI,EAAE;MACTF,YAAY,CAAC,IAAI,CAAC;MAClB;IACF;IACAV,SAAS,CAACY,IAAI,CAAC;IACfb,OAAO,CAAC,CAAC;EACX,CAAC;EAED,oBACE3F,KAAA,CAAAqB,aAAA,CAACZ,MAAM;IAACiF,IAAI,EAAEA,IAAK;IAACC,OAAO,EAAEA,OAAQ;IAACc,iBAAiB;EAAA,gBACrDzG,KAAA,CAAAqB,aAAA,CAACZ,MAAM,CAACiG,KAAK,QAAC,oBAAgC,CAAC,eAC/C1G,KAAA,CAAAqB,aAAA,CAACZ,MAAM,CAACkG,cAAc,MAAE,CAAC,eACzB3G,KAAA,CAAAqB,aAAA,CAACZ,MAAM,CAACmG,OAAO,qBACb5G,KAAA,CAAAqB,aAAA,CAACkE,iBAAiB,qBAChBvF,KAAA,CAAAqB,aAAA;IAAKwC,SAAS,EAAC;EAAU,gBACvB7D,KAAA,CAAAqB,aAAA,CAACR,KAAK;IAACgG,IAAI,EAAC,OAAO;IAAChD,SAAS,EAAC,UAAU;IAACH,OAAO,EAAEA;EAAQ,GAAC,YAEpD,CAAC,eACR1D,KAAA,CAAAqB,aAAA,CAAC+B,gBAAgB;IACfvB,YAAY,EAAEA,YAAa;IAC3BC,WAAW,EAAEA,WAAY;IACzB0B,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEuC,WAAY;IACtBtC,OAAO,EAAEA;EAAQ,CAClB,CACE,CAAC,eAEN1D,KAAA,CAAAqB,aAAA;IAAKwC,SAAS,EAAC;EAAU,gBACvB7D,KAAA,CAAAqB,aAAA,CAACb,QAAQ;IACPe,EAAE,EAAC,eAAe;IAClBuF,OAAO,EAAEZ,SAAU;IACnBzC,QAAQ,EAAGsD,CAAC,IAAKZ,YAAY,CAACY,CAAC,CAAC3B,MAAM,CAAC0B,OAAO;EAAE,CACjD,CAAC,eACF9G,KAAA,CAAAqB,aAAA,CAACR,KAAK;IAACmG,OAAO,EAAC,eAAe;IAACC,MAAM,EAAC;EAAS,GAAC,mBAEzC,CACJ,CAAC,eACNjH,KAAA,CAAAqB,aAAA,CAACL,KAAK;IAAC6C,SAAS,EAAC,eAAe;IAACyB,KAAK,EAAC;EAAU,GAAC,2EAG3C,CACU,CACL,CAAC,eACjBtF,KAAA,CAAAqB,aAAA,CAACZ,MAAM,CAACkG,cAAc,MAAE,CAAC,eACzB3G,KAAA,CAAAqB,aAAA,CAACZ,MAAM,CAACyG,OAAO,qBACblH,KAAA,CAAAqB,aAAA,CAACd,MAAM;IAAC4G,OAAO,EAAC,SAAS;IAACC,OAAO,EAAEb;EAAc,GAAC,SAE1C,CAAC,eACTvG,KAAA,CAAAqB,aAAA,CAACd,MAAM;IAAC4G,OAAO,EAAC,WAAW;IAACC,OAAO,EAAEzB;EAAQ,GAAC,QAEtC,CACM,CACV,CAAC;AAEb,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkBranchOrPullRequestDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/LinkBranchOrPullRequestDialog.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,YAAY,EAKb,MAAM,OAAO,CAAC;AAogBf,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,6BAA6B,GAAI,oBAG3C,kCAAkC,KAAG,
|
|
1
|
+
{"version":3,"file":"LinkBranchOrPullRequestDialog.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/LinkBranchOrPullRequestDialog.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,YAAY,EAKb,MAAM,OAAO,CAAC;AAogBf,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,6BAA6B,GAAI,oBAG3C,kCAAkC,KAAG,YA2SvC,CAAC"}
|
|
@@ -563,9 +563,6 @@ export const LinkBranchOrPullRequestDialog = _ref3 => {
|
|
|
563
563
|
onChange: e => setPrTitle(e.target.value)
|
|
564
564
|
}))))))), /*#__PURE__*/React.createElement(Dialog.ContentDivider, null), /*#__PURE__*/React.createElement(Dialog.Actions, null, /*#__PURE__*/React.createElement(Button, {
|
|
565
565
|
variant: "primary",
|
|
566
|
-
style: {
|
|
567
|
-
marginRight: 12
|
|
568
|
-
},
|
|
569
566
|
disabled: loading,
|
|
570
567
|
onClick: handleSubmit
|
|
571
568
|
}, primaryLabel), /*#__PURE__*/React.createElement(Button, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkBranchOrPullRequestDialog.js","names":["React","useCallback","useEffect","useRef","useState","styled","createGlobalStyle","CONNECTABLE_REPOSITORIES","CONNECTIONS","connectionIcon","ConnectRepositoryDialog","PROJECT_REPOSITORIES","RepositorySelect","Button","ChooseV2","Dialog","Input","Label","SkeletonLoader","Select","SelectTrigger","Caption1","SANS","LINKABLES","id","kind","name","repoId","updatedMinutesAgo","author","MONTHS","pad","n","String","padStart","formatAgo","minutesAgo","now","Date","then","getTime","Math","floor","time","getHours","getMinutes","toDateString","yesterday","monthDay","getMonth","getDate","getFullYear","linkableDetail","item","GROUPED_OPTIONS","map","repo","connection","find","c","connectionId","icon","service","items","filter","l","sort","a","b","additionalInfo","options","group","length","localeCompare","ALL_ITEMS","BRANCHES","isDefault","repoBranches","repoDefaultBranchId","_repoBranches$find$id","_repoBranches$find","baseBranchOptions","branches","defaults","rest","sourceBranchOptions","StyledLinkBody","div","withConfig","displayName","componentId","MenuGlobalStyle","_ref","$menuWidth","BranchMenuGlobalStyle","p","$cls","$w","BranchSelectWrap","BranchSelect","_ref2","_options$find$name","_options$find","selected","onChange","_ref2$placeholder","placeholder","wrapRef","_useState","menuWidth","setMenuWidth","_useState2","random","toString","slice","menuCls","measure","current","offsetWidth","selectedName","o","createElement","ref","undefined","v","selectClassName","onSelectOpen","disabledInternalSort","forceCloseMenu","target","className","typographyProps","color","MODE_OPTIONS","LinkBranchOrPullRequestDialog","_ref3","_ALL_ITEMS$find$name","_ALL_ITEMS$find","open","onClose","_useState3","mode","setMode","_useState4","setSelected","_useState5","branchName","setBranchName","_useState6","prTitle","setPrTitle","_useState7","attempted","setAttempted","_useState8","loading","setLoading","_useState9","_useState0","setRepo","_useState1","connectOpen","setConnectOpen","_useState10","extraRepos","setExtraRepos","_useState11","createFrom","setCreateFrom","_useState12","sourceBranch","setSourceBranch","_useState13","mergeInto","setMergeInto","defaultId","fieldRef","timer","window","setTimeout","clearTimeout","measureMenu","existingInvalid","branchInvalid","trim","titleInvalid","primaryLabel","close","handleSubmit","valid","changeMode","next","selectedLabel","projectRepos","connectableRepos","r","some","handleConnected","connected","prev","renderRepositoryField","size","repositories","connections","type","onClick","Fragment","disableCloseOnEsc","Title","ContentDivider","Content","required","ids","invalid","value","e","Actions","variant","style","marginRight","disabled","onConnect"],"sources":["../../../../src/presentation/shared/LinkBranchOrPullRequestDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport {\n CONNECTABLE_REPOSITORIES,\n CONNECTIONS,\n connectionIcon,\n ConnectRepositoryDialog,\n PROJECT_REPOSITORIES,\n Repository,\n RepositorySelect,\n} from \"./ConnectRepositoryDialog\";\nimport { Button } from \"../../components/Button\";\nimport { ChooseV2 } from \"../../components/ChooseV2\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Input } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Caption1 } from \"../../components/Typography\";\n\n/**\n * \"Link Branch or Pull Request\" dialog — shared by every `Presentation/Task\n * Source` story (the empty state and the populated Source Code section) so the\n * flow lives in one place.\n *\n * Three modes (ChooseV2): **Link Existing** (default), **New Branch**, **New\n * Pull Request**. The primary button is always enabled; validation runs on\n * click and outlines the offending field. Esc does not close the dialog (it\n * would lose entered data) — this is an action dialog.\n *\n * On open the body shows a ~1s skeleton, standing in for the future API loads\n * that will drive the repository / branch / PR pickers.\n *\n * The **Link Existing** picker is a grouped, multi-level select: options are\n * grouped by repository (with the connection name in parentheses), each option\n * carries a branch or pull-request icon, everything is sorted by name and\n * filterable via the search box at the top. The menu is sized to match the\n * trigger width.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/* ---- Mock data ------------------------------------------------------- */\n\ntype LinkableKind = \"branch\" | \"pr\";\n\ninterface Linkable {\n id: string;\n kind: LinkableKind;\n name: string;\n /** Repository this branch / PR belongs to (references PROJECT_REPOSITORIES). */\n repoId: string;\n /** Minutes since the last activity — drives the Ago label and the ordering. */\n updatedMinutesAgo: number;\n /** Author, shown for pull requests (\"… by Name\"). */\n author?: string;\n}\n\nconst LINKABLES: Linkable[] = [\n {\n id: \"pr-500\",\n kind: \"pr\",\n // Deliberately long, to show the name truncating with an ellipsis while the\n // right-aligned detail and radio stay visible.\n name: \"#500 Refactor rank recalculation to support multi-region contract archival and backfill\",\n repoId: \"backend\",\n updatedMinutesAgo: 8,\n author: \"Nikola M.\",\n },\n {\n id: \"branch-cache\",\n kind: \"branch\",\n name: \"spike/rank-cache\",\n repoId: \"backend\",\n updatedMinutesAgo: 30,\n },\n {\n id: \"branch-export\",\n kind: \"branch\",\n name: \"feature/retainer-export-34\",\n repoId: \"backend\",\n updatedMinutesAgo: 5 * 60,\n },\n {\n id: \"pr-119900\",\n kind: \"pr\",\n name: \"#119900 Rank API endpoints\",\n repoId: \"backend\",\n updatedMinutesAgo: 2 * 24 * 60,\n author: \"Ilija S.\",\n },\n {\n id: \"branch-fe-retainers\",\n kind: \"branch\",\n name: \"feature/retainers-ui-34\",\n repoId: \"frontend\",\n updatedMinutesAgo: 2 * 60,\n },\n {\n id: \"pr-412\",\n kind: \"pr\",\n name: \"#412 Contract list filters\",\n repoId: \"frontend\",\n updatedMinutesAgo: 24 * 60,\n author: \"Marko K.\",\n },\n {\n id: \"mr-88\",\n kind: \"pr\",\n name: \"!88 Bump worker memory\",\n repoId: \"infra\",\n updatedMinutesAgo: 3 * 24 * 60,\n author: \"Ana P.\",\n },\n {\n id: \"branch-deploy\",\n kind: \"branch\",\n name: \"chore/deploy-rank-cache\",\n repoId: \"infra\",\n updatedMinutesAgo: 24 * 60,\n },\n];\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n\n/**\n * Reproduces the format of ActiveCollab's standard `Ago` component\n * (`Angie.functions.ago()`) for the mock: \"Just now\", \"N minutes ago\",\n * \"Today HH:mm\", \"Yesterday HH:mm\", \"MMM D. HH:mm\", else \"MMM D. YYYY HH:mm\".\n * Production must use the real component.\n */\nconst formatAgo = (minutesAgo: number): string => {\n const now = new Date();\n const then = new Date(now.getTime() - minutesAgo * 60000);\n if (minutesAgo < 2) {\n return \"Just now\";\n }\n if (minutesAgo < 60) {\n return `${Math.floor(minutesAgo)} minutes ago`;\n }\n const time = `${pad(then.getHours())}:${pad(then.getMinutes())}`;\n if (then.toDateString() === now.toDateString()) {\n return `Today ${time}`;\n }\n const yesterday = new Date(now.getTime() - 24 * 60 * 60000);\n if (then.toDateString() === yesterday.toDateString()) {\n return `Yesterday ${time}`;\n }\n const monthDay = `${MONTHS[then.getMonth()]} ${then.getDate()}.`;\n if (then.getFullYear() === now.getFullYear()) {\n return `${monthDay} ${time}`;\n }\n return `${monthDay} ${then.getFullYear()} ${time}`;\n};\n\n/**\n * The detail shown on the right of an option: a branch keeps just the time of\n * its last activity; a pull request appends the author (\"… by Name\").\n */\nconst linkableDetail = (item: Linkable): string =>\n item.kind === \"pr\" && item.author\n ? `${formatAgo(item.updatedMinutesAgo)} by ${item.author}`\n : formatAgo(item.updatedMinutesAgo);\n\n/**\n * Grouped options for the Select. One group per repository, labelled\n * \"repo (Org)\" and sorted by name; inside a group, branches and PRs are\n * ordered by latest activity (freshest first). Each option carries a leading\n * provider icon (GitHub / GitLab / Git) via the Select's `icon` slot; the\n * service type is dropped from the group header since the icon now conveys it.\n */\nconst GROUPED_OPTIONS = PROJECT_REPOSITORIES.map((repo) => {\n const connection = CONNECTIONS.find((c) => c.id === repo.connectionId);\n const icon = connectionIcon(connection?.service);\n const items = LINKABLES.filter((l) => l.repoId === repo.id)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((l) => ({\n id: l.id,\n name: l.name,\n additionalInfo: linkableDetail(l),\n icon,\n }));\n return {\n id: repo.id,\n name: connection ? `${repo.name} (${connection.name})` : repo.name,\n options: items,\n };\n})\n .filter((group) => group.options.length > 0)\n .sort((a, b) => a.name.localeCompare(b.name));\n\nconst ALL_ITEMS: Linkable[] = LINKABLES;\n\n/* ---- Branch mock data (for the New Branch / New Pull Request bases) --- */\n\ninterface Branch {\n id: string;\n name: string;\n repoId: string;\n /** The repository's default branch (main / master). */\n isDefault?: boolean;\n updatedMinutesAgo: number;\n}\n\nconst BRANCHES: Branch[] = [\n // activecollab/backend\n {\n id: \"backend-main\",\n name: \"main\",\n repoId: \"backend\",\n isDefault: true,\n updatedMinutesAgo: 60,\n },\n {\n id: \"backend-cache\",\n name: \"spike/rank-cache\",\n repoId: \"backend\",\n updatedMinutesAgo: 30,\n },\n {\n id: \"backend-export\",\n name: \"feature/retainer-export-34\",\n repoId: \"backend\",\n updatedMinutesAgo: 5 * 60,\n },\n {\n id: \"backend-hotfix\",\n name: \"hotfix/rank-typo\",\n repoId: \"backend\",\n updatedMinutesAgo: 3 * 24 * 60,\n },\n // activecollab/frontend\n {\n id: \"frontend-main\",\n name: \"main\",\n repoId: \"frontend\",\n isDefault: true,\n updatedMinutesAgo: 90,\n },\n {\n id: \"frontend-retainers\",\n name: \"feature/retainers-ui-34\",\n repoId: \"frontend\",\n updatedMinutesAgo: 2 * 60,\n },\n {\n id: \"frontend-filters\",\n name: \"feature/contract-filters\",\n repoId: \"frontend\",\n updatedMinutesAgo: 24 * 60,\n },\n // activecollab/infrastructure\n {\n id: \"infra-master\",\n name: \"master\",\n repoId: \"infra\",\n isDefault: true,\n updatedMinutesAgo: 6 * 60,\n },\n {\n id: \"infra-deploy\",\n name: \"chore/deploy-rank-cache\",\n repoId: \"infra\",\n updatedMinutesAgo: 24 * 60,\n },\n];\n\nconst repoBranches = (repoId: string): Branch[] =>\n BRANCHES.filter((b) => b.repoId === repoId);\n\nconst repoDefaultBranchId = (repoId: string): string | null =>\n repoBranches(repoId).find((b) => b.isDefault)?.id ?? null;\n\ninterface BranchOption {\n id: string;\n name: string;\n additionalInfo?: string;\n}\n\n/**\n * Base-branch options (Create From / Merge Into): the default branch first with\n * no timestamp, then the rest sorted by latest activity (freshest first), each\n * with a muted \"last activity\" time.\n */\nconst baseBranchOptions = (repoId: string): BranchOption[] => {\n const branches = repoBranches(repoId);\n const defaults = branches\n .filter((b) => b.isDefault)\n .map((b) => ({ id: b.id, name: b.name }));\n const rest = branches\n .filter((b) => !b.isDefault)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((b) => ({\n id: b.id,\n name: b.name,\n additionalInfo: formatAgo(b.updatedMinutesAgo),\n }));\n return [...defaults, ...rest];\n};\n\n/**\n * Source-branch options (New Pull Request): the default branch is excluded — you\n * don't open a PR to merge the trunk into a feature branch — and the rest are\n * sorted by latest activity, each with a muted \"last activity\" time.\n */\nconst sourceBranchOptions = (repoId: string): BranchOption[] =>\n repoBranches(repoId)\n .filter((b) => !b.isDefault)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((b) => ({\n id: b.id,\n name: b.name,\n additionalInfo: formatAgo(b.updatedMinutesAgo),\n }));\n\n/* ---- Styles ---------------------------------------------------------- */\n\nconst StyledLinkBody = styled.div`\n font-family: ${SANS};\n\n .lk-tabbody {\n margin-top: 18px;\n }\n\n .lk-field {\n margin-bottom: 16px;\n }\n .lk-field:last-child {\n margin-bottom: 0;\n }\n .lk-label {\n display: block;\n margin-bottom: 6px;\n }\n /* DS Input wrapper is 360px and SelectTrigger 300px — fill the dialog. */\n .lk-control,\n .lk-control.c-input-wrapper {\n width: 100%;\n max-width: none;\n }\n\n /* Explainer + inline connect link under the repository picker. */\n .lk-repo-hint {\n display: block;\n margin-top: 8px;\n }\n .lk-repo-link {\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n color: var(--color-primary);\n cursor: pointer;\n }\n .lk-repo-link:hover {\n text-decoration: underline;\n }\n\n /* Skeleton placeholder shown for ~1s while the pickers \"load\". */\n .lk-skeleton .sk-row {\n margin-bottom: 18px;\n }\n .lk-skeleton .sk-choose {\n width: 100%;\n height: 36px;\n border-radius: 6px;\n }\n .lk-skeleton .sk-label {\n width: 160px;\n height: 12px;\n margin-bottom: 8px;\n }\n .lk-skeleton .sk-control {\n width: 100%;\n height: 40px;\n border-radius: 6px;\n }\n`;\n\n/**\n * The grouped select menu renders through a portal, so the \"match the trigger\n * width\" override has to be global, scoped to the menu's class. `$menuWidth` is\n * measured from the trigger and injected here.\n */\nconst MenuGlobalStyle = createGlobalStyle<{ $menuWidth?: number }>`\n .c-select.lk-existing-select-menu {\n ${({ $menuWidth }) =>\n $menuWidth\n ? `width: ${$menuWidth}px !important; max-width: none !important;`\n : \"\"}\n }\n\n /* Standard secondary styling for the right-aligned detail (last activity /\n author). The DS AdditionalInfo span ships unstyled and otherwise inherits\n the option name's dark weight; mute it so it reads as a secondary detail. */\n .c-select.lk-existing-select-menu .c-option--text + span {\n color: var(--color-theme-600);\n font-size: 12px;\n }\n`;\n\n/**\n * Per-instance global style for a branch select menu: matches the trigger width\n * and applies the standard muted styling to the right-aligned \"last activity\".\n */\nconst BranchMenuGlobalStyle = createGlobalStyle<{ $cls: string; $w?: number }>`\n .c-select.${(p) => p.$cls} {\n ${(p) =>\n p.$w ? `width: ${p.$w}px !important; max-width: none !important;` : \"\"}\n }\n .c-select.${(p) => p.$cls} .c-option--text + span {\n color: var(--color-theme-600);\n font-size: 12px;\n }\n`;\n\nconst BranchSelectWrap = styled.div`\n font-family: ${SANS};\n\n .branch-trigger {\n width: 100%;\n max-width: none;\n }\n`;\n\ninterface BranchSelectProps {\n options: BranchOption[];\n selected: string | null;\n onChange: (id: string) => void;\n placeholder?: string;\n}\n\n/**\n * Flat branch picker (Create From / Source Branch / Merge Into). The caller\n * supplies the option order (default-first or activity-sorted); the DS internal\n * alphabetical sort is disabled so that order is preserved.\n */\nconst BranchSelect = ({\n options,\n selected,\n onChange,\n placeholder = \"Select branch\",\n}: BranchSelectProps): ReactElement => {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n const [menuCls] = useState(\n () => `branch-select-menu-${Math.random().toString(36).slice(2)}`\n );\n\n const measure = useCallback(() => {\n if (wrapRef.current) {\n setMenuWidth(wrapRef.current.offsetWidth);\n }\n }, []);\n\n useEffect(() => {\n measure();\n }, [measure]);\n\n const selectedName =\n options.find((o) => o.id === selected)?.name ?? placeholder;\n\n return (\n <BranchSelectWrap ref={wrapRef}>\n <BranchMenuGlobalStyle $cls={menuCls} $w={menuWidth} />\n <Select\n options={options}\n selected={selected === null ? undefined : selected}\n onChange={(v) => onChange(String(v))}\n placeholder=\"Search branches\"\n selectClassName={menuCls}\n onSelectOpen={measure}\n disabledInternalSort\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"branch-trigger\"\n typographyProps={\n selected === null ? { color: \"tertiary\" } : undefined\n }\n >\n {selectedName}\n </SelectTrigger>\n }\n />\n </BranchSelectWrap>\n );\n};\n\ntype LinkMode = \"existing\" | \"branch\" | \"pr\";\n\nconst MODE_OPTIONS = [\n { id: \"existing\", name: \"Link Existing\" },\n { id: \"branch\", name: \"New Branch\" },\n { id: \"pr\", name: \"New Pull Request\" },\n];\n\nexport interface LinkBranchOrPullRequestDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nexport const LinkBranchOrPullRequestDialog = ({\n open,\n onClose,\n}: LinkBranchOrPullRequestDialogProps): ReactElement => {\n const [mode, setMode] = useState<LinkMode>(\"existing\");\n const [selected, setSelected] = useState<string | null>(null);\n const [branchName, setBranchName] = useState(\"feature/retainers-34\");\n const [prTitle, setPrTitle] = useState(\n \"#34 Retainers & Contracts functionality\"\n );\n const [attempted, setAttempted] = useState(false);\n const [loading, setLoading] = useState(true);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n\n // Repository picker (New Branch / New Pull Request) + connect-repository flow.\n const [repo, setRepo] = useState<string>(\"backend\");\n const [connectOpen, setConnectOpen] = useState(false);\n const [extraRepos, setExtraRepos] = useState<Repository[]>([]);\n\n // Branch bases. Create From / Merge Into default to the repo's default branch;\n // Source Branch starts unselected.\n const [createFrom, setCreateFrom] = useState<string | null>(() =>\n repoDefaultBranchId(\"backend\")\n );\n const [sourceBranch, setSourceBranch] = useState<string | null>(null);\n const [mergeInto, setMergeInto] = useState<string | null>(() =>\n repoDefaultBranchId(\"backend\")\n );\n\n // When the repository changes, reset the bases: default branch for\n // Create From / Merge Into, nothing for Source Branch.\n useEffect(() => {\n const defaultId = repoDefaultBranchId(repo);\n setCreateFrom(defaultId);\n setMergeInto(defaultId);\n setSourceBranch(null);\n }, [repo]);\n\n const fieldRef = useRef<HTMLDivElement>(null);\n\n // Simulate the API loads that will drive the pickers: a ~1s skeleton on open.\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n setLoading(true);\n const timer = window.setTimeout(() => setLoading(false), 1000);\n return () => window.clearTimeout(timer);\n }, [open]);\n\n const measureMenu = useCallback(() => {\n if (fieldRef.current) {\n setMenuWidth(fieldRef.current.offsetWidth);\n }\n }, []);\n\n // Keep the menu width in sync with the trigger once the form is visible.\n useEffect(() => {\n if (open && !loading && mode === \"existing\") {\n measureMenu();\n }\n }, [open, loading, mode, measureMenu]);\n\n // Submit is always enabled; validation runs on click and outlines fields.\n const existingInvalid = attempted && mode === \"existing\" && selected === null;\n const branchInvalid =\n attempted && mode === \"branch\" && branchName.trim() === \"\";\n const titleInvalid = attempted && mode === \"pr\" && prTitle.trim() === \"\";\n\n const primaryLabel =\n mode === \"existing\"\n ? \"Link\"\n : mode === \"branch\"\n ? \"Create Branch\"\n : \"Create Pull Request\";\n\n const close = () => {\n setAttempted(false);\n onClose();\n };\n\n const handleSubmit = () => {\n const valid =\n mode === \"existing\"\n ? selected !== null\n : mode === \"branch\"\n ? branchName.trim() !== \"\"\n : prTitle.trim() !== \"\";\n if (!valid) {\n setAttempted(true);\n return;\n }\n close();\n };\n\n const changeMode = (next: LinkMode) => {\n setMode(next);\n setAttempted(false);\n };\n\n const selectedLabel =\n ALL_ITEMS.find((o) => o.id === selected)?.name ??\n \"Select branch or pull request\";\n\n // Repositories already on the project (plus any just connected), and the\n // remaining ones that can still be connected from here.\n const projectRepos = [...PROJECT_REPOSITORIES, ...extraRepos];\n const connectableRepos = CONNECTABLE_REPOSITORIES.filter(\n (r) => !projectRepos.some((p) => p.id === r.id)\n );\n\n const handleConnected = (connected: Repository) => {\n setExtraRepos((prev) =>\n prev.some((r) => r.id === connected.id) ? prev : [...prev, connected]\n );\n // The repository just connected becomes the selection in the picker.\n setRepo(connected.id);\n };\n\n const renderRepositoryField = (): ReactElement => (\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Repository\n </Label>\n <RepositorySelect\n repositories={projectRepos}\n connections={CONNECTIONS}\n selected={repo}\n onChange={setRepo}\n />\n <Caption1 color=\"tertiary\" className=\"lk-repo-hint\">\n Only repositories connected to this project are listed.{\" \"}\n <button\n type=\"button\"\n className=\"lk-repo-link\"\n onClick={() => setConnectOpen(true)}\n >\n Connect a repository\n </button>{\" \"}\n if the one you need is missing.\n </Caption1>\n </div>\n );\n\n return (\n <>\n <Dialog open={open} onClose={close} disableCloseOnEsc>\n <MenuGlobalStyle $menuWidth={menuWidth} />\n <Dialog.Title>Link Branch or Pull Request</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledLinkBody>\n {loading ? (\n <div className=\"lk-skeleton\">\n <div className=\"sk-row\">\n <SkeletonLoader className=\"sk-choose\" />\n </div>\n <div className=\"sk-row\">\n <SkeletonLoader className=\"sk-label\" />\n <SkeletonLoader className=\"sk-control\" />\n </div>\n </div>\n ) : (\n <>\n <ChooseV2\n required\n options={MODE_OPTIONS}\n selected={[mode]}\n onChange={(ids) => changeMode(ids[0] as LinkMode)}\n />\n\n <div className=\"lk-tabbody\">\n {mode === \"existing\" ? (\n <div className=\"lk-field\" ref={fieldRef}>\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={existingInvalid}\n >\n Branch or Pull Request\n </Label>\n <Select\n options={GROUPED_OPTIONS}\n selected={selected === null ? undefined : selected}\n onChange={(v) => setSelected(v as string)}\n placeholder=\"Search branches and pull requests\"\n selectClassName=\"lk-existing-select-menu\"\n onSelectOpen={measureMenu}\n disabledInternalSort\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"lk-control\"\n invalid={existingInvalid}\n typographyProps={\n selected === null\n ? { color: \"tertiary\" }\n : undefined\n }\n >\n {selectedLabel}\n </SelectTrigger>\n }\n />\n </div>\n ) : mode === \"branch\" ? (\n <>\n {renderRepositoryField()}\n <div className=\"lk-field\">\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={branchInvalid}\n >\n Branch Name\n </Label>\n <Input\n className=\"lk-control\"\n value={branchName}\n invalid={branchInvalid}\n onChange={(e) => setBranchName(e.target.value)}\n />\n </div>\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Create From\n </Label>\n <BranchSelect\n options={baseBranchOptions(repo)}\n selected={createFrom}\n onChange={setCreateFrom}\n placeholder=\"Select base branch\"\n />\n </div>\n </>\n ) : (\n <>\n {renderRepositoryField()}\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Source Branch\n </Label>\n <BranchSelect\n options={sourceBranchOptions(repo)}\n selected={sourceBranch}\n onChange={setSourceBranch}\n placeholder=\"Select source branch\"\n />\n </div>\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Merge Into\n </Label>\n <BranchSelect\n options={baseBranchOptions(repo)}\n selected={mergeInto}\n onChange={setMergeInto}\n placeholder=\"Select base branch\"\n />\n </div>\n <div className=\"lk-field\">\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={titleInvalid}\n >\n Title\n </Label>\n <Input\n className=\"lk-control\"\n value={prTitle}\n invalid={titleInvalid}\n onChange={(e) => setPrTitle(e.target.value)}\n />\n </div>\n </>\n )}\n </div>\n </>\n )}\n </StyledLinkBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n disabled={loading}\n onClick={handleSubmit}\n >\n {primaryLabel}\n </Button>\n <Button variant=\"secondary\" onClick={close}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <ConnectRepositoryDialog\n open={connectOpen}\n onClose={() => setConnectOpen(false)}\n onConnect={handleConnected}\n repositories={connectableRepos}\n connections={CONNECTIONS}\n />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,OAAOC,MAAM,IAAIC,iBAAiB,QAAQ,mBAAmB;AAE7D,SACEC,wBAAwB,EACxBC,WAAW,EACXC,cAAc,EACdC,uBAAuB,EACvBC,oBAAoB,EAEpBC,gBAAgB,QACX,2BAA2B;AAClC,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,aAAa,QAAQ,gCAAgC;AAC9D,SAASC,QAAQ,QAAQ,6BAA6B;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,IAAI,GACR,kFAAkF;;AAEpF;;AAgBA,MAAMC,SAAqB,GAAG,CAC5B;EACEC,EAAE,EAAE,QAAQ;EACZC,IAAI,EAAE,IAAI;EACV;EACA;EACAC,IAAI,EAAE,yFAAyF;EAC/FC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE,CAAC;EACpBC,MAAM,EAAE;AACV,CAAC,EACD;EACEL,EAAE,EAAE,cAAc;EAClBC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,kBAAkB;EACxBC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE;AACrB,CAAC,EACD;EACEJ,EAAE,EAAE,eAAe;EACnBC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,4BAA4B;EAClCC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE,CAAC,GAAG;AACzB,CAAC,EACD;EACEJ,EAAE,EAAE,WAAW;EACfC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE,4BAA4B;EAClCC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;EAC9BC,MAAM,EAAE;AACV,CAAC,EACD;EACEL,EAAE,EAAE,qBAAqB;EACzBC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,yBAAyB;EAC/BC,MAAM,EAAE,UAAU;EAClBC,iBAAiB,EAAE,CAAC,GAAG;AACzB,CAAC,EACD;EACEJ,EAAE,EAAE,QAAQ;EACZC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE,4BAA4B;EAClCC,MAAM,EAAE,UAAU;EAClBC,iBAAiB,EAAE,EAAE,GAAG,EAAE;EAC1BC,MAAM,EAAE;AACV,CAAC,EACD;EACEL,EAAE,EAAE,OAAO;EACXC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE,wBAAwB;EAC9BC,MAAM,EAAE,OAAO;EACfC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;EAC9BC,MAAM,EAAE;AACV,CAAC,EACD;EACEL,EAAE,EAAE,eAAe;EACnBC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,yBAAyB;EAC/BC,MAAM,EAAE,OAAO;EACfC,iBAAiB,EAAE,EAAE,GAAG;AAC1B,CAAC,CACF;AAED,MAAME,MAAM,GAAG,CACb,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,CACN;AAED,MAAMC,GAAG,GAAIC,CAAS,IAAaC,MAAM,CAACD,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAIC,UAAkB,IAAa;EAChD,MAAMC,GAAG,GAAG,IAAIC,IAAI,CAAC,CAAC;EACtB,MAAMC,IAAI,GAAG,IAAID,IAAI,CAACD,GAAG,CAACG,OAAO,CAAC,CAAC,GAAGJ,UAAU,GAAG,KAAK,CAAC;EACzD,IAAIA,UAAU,GAAG,CAAC,EAAE;IAClB,OAAO,UAAU;EACnB;EACA,IAAIA,UAAU,GAAG,EAAE,EAAE;IACnB,OAAUK,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC;EAClC;EACA,MAAMO,IAAI,GAAMZ,GAAG,CAACQ,IAAI,CAACK,QAAQ,CAAC,CAAC,CAAC,SAAIb,GAAG,CAACQ,IAAI,CAACM,UAAU,CAAC,CAAC,CAAG;EAChE,IAAIN,IAAI,CAACO,YAAY,CAAC,CAAC,KAAKT,GAAG,CAACS,YAAY,CAAC,CAAC,EAAE;IAC9C,kBAAgBH,IAAI;EACtB;EACA,MAAMI,SAAS,GAAG,IAAIT,IAAI,CAACD,GAAG,CAACG,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;EAC3D,IAAID,IAAI,CAACO,YAAY,CAAC,CAAC,KAAKC,SAAS,CAACD,YAAY,CAAC,CAAC,EAAE;IACpD,sBAAoBH,IAAI;EAC1B;EACA,MAAMK,QAAQ,GAAMlB,MAAM,CAACS,IAAI,CAACU,QAAQ,CAAC,CAAC,CAAC,SAAIV,IAAI,CAACW,OAAO,CAAC,CAAC,MAAG;EAChE,IAAIX,IAAI,CAACY,WAAW,CAAC,CAAC,KAAKd,GAAG,CAACc,WAAW,CAAC,CAAC,EAAE;IAC5C,OAAUH,QAAQ,SAAIL,IAAI;EAC5B;EACA,OAAUK,QAAQ,SAAIT,IAAI,CAACY,WAAW,CAAC,CAAC,SAAIR,IAAI;AAClD,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMS,cAAc,GAAIC,IAAc,IACpCA,IAAI,CAAC5B,IAAI,KAAK,IAAI,IAAI4B,IAAI,CAACxB,MAAM,GAC1BM,SAAS,CAACkB,IAAI,CAACzB,iBAAiB,CAAC,YAAOyB,IAAI,CAACxB,MAAM,GACtDM,SAAS,CAACkB,IAAI,CAACzB,iBAAiB,CAAC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0B,eAAe,GAAG3C,oBAAoB,CAAC4C,GAAG,CAAEC,IAAI,IAAK;EACzD,MAAMC,UAAU,GAAGjD,WAAW,CAACkD,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACnC,EAAE,KAAKgC,IAAI,CAACI,YAAY,CAAC;EACtE,MAAMC,IAAI,GAAGpD,cAAc,CAACgD,UAAU,oBAAVA,UAAU,CAAEK,OAAO,CAAC;EAChD,MAAMC,KAAK,GAAGxC,SAAS,CAACyC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACtC,MAAM,KAAK6B,IAAI,CAAChC,EAAE,CAAC,CACxD0C,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACvC,iBAAiB,GAAGwC,CAAC,CAACxC,iBAAiB,CAAC,CACzD2B,GAAG,CAAEU,CAAC,KAAM;IACXzC,EAAE,EAAEyC,CAAC,CAACzC,EAAE;IACRE,IAAI,EAAEuC,CAAC,CAACvC,IAAI;IACZ2C,cAAc,EAAEjB,cAAc,CAACa,CAAC,CAAC;IACjCJ;EACF,CAAC,CAAC,CAAC;EACL,OAAO;IACLrC,EAAE,EAAEgC,IAAI,CAAChC,EAAE;IACXE,IAAI,EAAE+B,UAAU,GAAMD,IAAI,CAAC9B,IAAI,UAAK+B,UAAU,CAAC/B,IAAI,SAAM8B,IAAI,CAAC9B,IAAI;IAClE4C,OAAO,EAAEP;EACX,CAAC;AACH,CAAC,CAAC,CACCC,MAAM,CAAEO,KAAK,IAAKA,KAAK,CAACD,OAAO,CAACE,MAAM,GAAG,CAAC,CAAC,CAC3CN,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACzC,IAAI,CAAC+C,aAAa,CAACL,CAAC,CAAC1C,IAAI,CAAC,CAAC;AAE/C,MAAMgD,SAAqB,GAAGnD,SAAS;;AAEvC;;AAWA,MAAMoD,QAAkB,GAAG;AACzB;AACA;EACEnD,EAAE,EAAE,cAAc;EAClBE,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,SAAS;EACjBiD,SAAS,EAAE,IAAI;EACfhD,iBAAiB,EAAE;AACrB,CAAC,EACD;EACEJ,EAAE,EAAE,eAAe;EACnBE,IAAI,EAAE,kBAAkB;EACxBC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE;AACrB,CAAC,EACD;EACEJ,EAAE,EAAE,gBAAgB;EACpBE,IAAI,EAAE,4BAA4B;EAClCC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE,CAAC,GAAG;AACzB,CAAC,EACD;EACEJ,EAAE,EAAE,gBAAgB;EACpBE,IAAI,EAAE,kBAAkB;EACxBC,MAAM,EAAE,SAAS;EACjBC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG;AAC9B,CAAC;AACD;AACA;EACEJ,EAAE,EAAE,eAAe;EACnBE,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,UAAU;EAClBiD,SAAS,EAAE,IAAI;EACfhD,iBAAiB,EAAE;AACrB,CAAC,EACD;EACEJ,EAAE,EAAE,oBAAoB;EACxBE,IAAI,EAAE,yBAAyB;EAC/BC,MAAM,EAAE,UAAU;EAClBC,iBAAiB,EAAE,CAAC,GAAG;AACzB,CAAC,EACD;EACEJ,EAAE,EAAE,kBAAkB;EACtBE,IAAI,EAAE,0BAA0B;EAChCC,MAAM,EAAE,UAAU;EAClBC,iBAAiB,EAAE,EAAE,GAAG;AAC1B,CAAC;AACD;AACA;EACEJ,EAAE,EAAE,cAAc;EAClBE,IAAI,EAAE,QAAQ;EACdC,MAAM,EAAE,OAAO;EACfiD,SAAS,EAAE,IAAI;EACfhD,iBAAiB,EAAE,CAAC,GAAG;AACzB,CAAC,EACD;EACEJ,EAAE,EAAE,cAAc;EAClBE,IAAI,EAAE,yBAAyB;EAC/BC,MAAM,EAAE,OAAO;EACfC,iBAAiB,EAAE,EAAE,GAAG;AAC1B,CAAC,CACF;AAED,MAAMiD,YAAY,GAAIlD,MAAc,IAClCgD,QAAQ,CAACX,MAAM,CAAEI,CAAC,IAAKA,CAAC,CAACzC,MAAM,KAAKA,MAAM,CAAC;AAE7C,MAAMmD,mBAAmB,GAAInD,MAAc;EAAA,IAAAoD,qBAAA,EAAAC,kBAAA;EAAA,QAAAD,qBAAA,IAAAC,kBAAA,GACzCH,YAAY,CAAClD,MAAM,CAAC,CAAC+B,IAAI,CAAEU,CAAC,IAAKA,CAAC,CAACQ,SAAS,CAAC,qBAA7CI,kBAAA,CAA+CxD,EAAE,YAAAuD,qBAAA,GAAI,IAAI;AAAA;AAQ3D;AACA;AACA;AACA;AACA;AACA,MAAME,iBAAiB,GAAItD,MAAc,IAAqB;EAC5D,MAAMuD,QAAQ,GAAGL,YAAY,CAAClD,MAAM,CAAC;EACrC,MAAMwD,QAAQ,GAAGD,QAAQ,CACtBlB,MAAM,CAAEI,CAAC,IAAKA,CAAC,CAACQ,SAAS,CAAC,CAC1BrB,GAAG,CAAEa,CAAC,KAAM;IAAE5C,EAAE,EAAE4C,CAAC,CAAC5C,EAAE;IAAEE,IAAI,EAAE0C,CAAC,CAAC1C;EAAK,CAAC,CAAC,CAAC;EAC3C,MAAM0D,IAAI,GAAGF,QAAQ,CAClBlB,MAAM,CAAEI,CAAC,IAAK,CAACA,CAAC,CAACQ,SAAS,CAAC,CAC3BV,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACvC,iBAAiB,GAAGwC,CAAC,CAACxC,iBAAiB,CAAC,CACzD2B,GAAG,CAAEa,CAAC,KAAM;IACX5C,EAAE,EAAE4C,CAAC,CAAC5C,EAAE;IACRE,IAAI,EAAE0C,CAAC,CAAC1C,IAAI;IACZ2C,cAAc,EAAElC,SAAS,CAACiC,CAAC,CAACxC,iBAAiB;EAC/C,CAAC,CAAC,CAAC;EACL,OAAO,CAAC,GAAGuD,QAAQ,EAAE,GAAGC,IAAI,CAAC;AAC/B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAI1D,MAAc,IACzCkD,YAAY,CAAClD,MAAM,CAAC,CACjBqC,MAAM,CAAEI,CAAC,IAAK,CAACA,CAAC,CAACQ,SAAS,CAAC,CAC3BV,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACvC,iBAAiB,GAAGwC,CAAC,CAACxC,iBAAiB,CAAC,CACzD2B,GAAG,CAAEa,CAAC,KAAM;EACX5C,EAAE,EAAE4C,CAAC,CAAC5C,EAAE;EACRE,IAAI,EAAE0C,CAAC,CAAC1C,IAAI;EACZ2C,cAAc,EAAElC,SAAS,CAACiC,CAAC,CAACxC,iBAAiB;AAC/C,CAAC,CAAC,CAAC;;AAEP;;AAEA,MAAM0D,cAAc,GAAGjF,MAAM,CAACkF,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,gqBAChBpE,IAAI,CA2DpB;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMqE,eAAe,GAAGrF,iBAAiB,oJAEnCsF,IAAA;EAAA,IAAGC,UAAU,GAAAD,IAAA,CAAVC,UAAU;EAAA,OACbA,UAAU,eACIA,UAAU,kDACpB,EAAE;AAAA,EAUX;;AAED;AACA;AACA;AACA;AACA,MAAMC,qBAAqB,GAAGxF,iBAAiB,8GAChCyF,CAAC,IAAKA,CAAC,CAACC,IAAI,EACpBD,CAAC,IACFA,CAAC,CAACE,EAAE,eAAaF,CAAC,CAACE,EAAE,kDAA+C,EAAE,EAE7DF,CAAC,IAAKA,CAAC,CAACC,IAAI,CAI1B;AAED,MAAME,gBAAgB,GAAG7F,MAAM,CAACkF,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,qEAClBpE,IAAI,CAMpB;AASD;AACA;AACA;AACA;AACA;AACA,MAAM6E,YAAY,GAAGC,KAAA,IAKkB;EAAA,IAAAC,kBAAA,EAAAC,aAAA;EAAA,IAJrChC,OAAO,GAAA8B,KAAA,CAAP9B,OAAO;IACPiC,QAAQ,GAAAH,KAAA,CAARG,QAAQ;IACRC,QAAQ,GAAAJ,KAAA,CAARI,QAAQ;IAAAC,iBAAA,GAAAL,KAAA,CACRM,WAAW;IAAXA,WAAW,GAAAD,iBAAA,cAAG,eAAe,GAAAA,iBAAA;EAE7B,MAAME,OAAO,GAAGxG,MAAM,CAAiB,IAAI,CAAC;EAC5C,MAAAyG,SAAA,GAAkCxG,QAAQ,CAAqB,CAAC;IAAzDyG,SAAS,GAAAD,SAAA;IAAEE,YAAY,GAAAF,SAAA;EAC9B,MAAAG,UAAA,GAAkB3G,QAAQ,CACxB,8BAA4BqC,IAAI,CAACuE,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAChE,CAAC;IAFMC,OAAO,GAAAJ,UAAA;EAId,MAAMK,OAAO,GAAGnH,WAAW,CAAC,MAAM;IAChC,IAAI0G,OAAO,CAACU,OAAO,EAAE;MACnBP,YAAY,CAACH,OAAO,CAACU,OAAO,CAACC,WAAW,CAAC;IAC3C;EACF,CAAC,EAAE,EAAE,CAAC;EAENpH,SAAS,CAAC,MAAM;IACdkH,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMG,YAAY,IAAAlB,kBAAA,IAAAC,aAAA,GAChBhC,OAAO,CAACZ,IAAI,CAAE8D,CAAC,IAAKA,CAAC,CAAChG,EAAE,KAAK+E,QAAQ,CAAC,qBAAtCD,aAAA,CAAwC5E,IAAI,YAAA2E,kBAAA,GAAIK,WAAW;EAE7D,oBACE1G,KAAA,CAAAyH,aAAA,CAACvB,gBAAgB;IAACwB,GAAG,EAAEf;EAAQ,gBAC7B3G,KAAA,CAAAyH,aAAA,CAAC3B,qBAAqB;IAACE,IAAI,EAAEmB,OAAQ;IAAClB,EAAE,EAAEY;EAAU,CAAE,CAAC,eACvD7G,KAAA,CAAAyH,aAAA,CAACtG,MAAM;IACLmD,OAAO,EAAEA,OAAQ;IACjBiC,QAAQ,EAAEA,QAAQ,KAAK,IAAI,GAAGoB,SAAS,GAAGpB,QAAS;IACnDC,QAAQ,EAAGoB,CAAC,IAAKpB,QAAQ,CAACvE,MAAM,CAAC2F,CAAC,CAAC,CAAE;IACrClB,WAAW,EAAC,iBAAiB;IAC7BmB,eAAe,EAAEV,OAAQ;IACzBW,YAAY,EAAEV,OAAQ;IACtBW,oBAAoB;IACpBC,cAAc;IACdC,MAAM,eACJjI,KAAA,CAAAyH,aAAA,CAACrG,aAAa;MACZ8G,SAAS,EAAC,gBAAgB;MAC1BC,eAAe,EACb5B,QAAQ,KAAK,IAAI,GAAG;QAAE6B,KAAK,EAAE;MAAW,CAAC,GAAGT;IAC7C,GAEAJ,YACY;EAChB,CACF,CACe,CAAC;AAEvB,CAAC;AAID,MAAMc,YAAY,GAAG,CACnB;EAAE7G,EAAE,EAAE,UAAU;EAAEE,IAAI,EAAE;AAAgB,CAAC,EACzC;EAAEF,EAAE,EAAE,QAAQ;EAAEE,IAAI,EAAE;AAAa,CAAC,EACpC;EAAEF,EAAE,EAAE,IAAI;EAAEE,IAAI,EAAE;AAAmB,CAAC,CACvC;AAOD,OAAO,MAAM4G,6BAA6B,GAAGC,KAAA,IAGW;EAAA,IAAAC,oBAAA,EAAAC,eAAA;EAAA,IAFtDC,IAAI,GAAAH,KAAA,CAAJG,IAAI;IACJC,OAAO,GAAAJ,KAAA,CAAPI,OAAO;EAEP,MAAAC,UAAA,GAAwBxI,QAAQ,CAAW,UAAU,CAAC;IAA/CyI,IAAI,GAAAD,UAAA;IAAEE,OAAO,GAAAF,UAAA;EACpB,MAAAG,UAAA,GAAgC3I,QAAQ,CAAgB,IAAI,CAAC;IAAtDmG,QAAQ,GAAAwC,UAAA;IAAEC,WAAW,GAAAD,UAAA;EAC5B,MAAAE,UAAA,GAAoC7I,QAAQ,CAAC,sBAAsB,CAAC;IAA7D8I,UAAU,GAAAD,UAAA;IAAEE,aAAa,GAAAF,UAAA;EAChC,MAAAG,UAAA,GAA8BhJ,QAAQ,CACpC,yCACF,CAAC;IAFMiJ,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;EAG1B,MAAAG,UAAA,GAAkCnJ,QAAQ,CAAC,KAAK,CAAC;IAA1CoJ,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAC9B,MAAAG,UAAA,GAA8BtJ,QAAQ,CAAC,IAAI,CAAC;IAArCuJ,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;EAC1B,MAAAG,UAAA,GAAkCzJ,QAAQ,CAAqB,CAAC;IAAzDyG,SAAS,GAAAgD,UAAA;IAAE/C,YAAY,GAAA+C,UAAA;;EAE9B;EACA,MAAAC,UAAA,GAAwB1J,QAAQ,CAAS,SAAS,CAAC;IAA5CoD,IAAI,GAAAsG,UAAA;IAAEC,OAAO,GAAAD,UAAA;EACpB,MAAAE,UAAA,GAAsC5J,QAAQ,CAAC,KAAK,CAAC;IAA9C6J,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAClC,MAAAG,WAAA,GAAoC/J,QAAQ,CAAe,EAAE,CAAC;IAAvDgK,UAAU,GAAAD,WAAA;IAAEE,aAAa,GAAAF,WAAA;;EAEhC;EACA;EACA,MAAAG,WAAA,GAAoClK,QAAQ,CAAgB,MAC1D0E,mBAAmB,CAAC,SAAS,CAC/B,CAAC;IAFMyF,UAAU,GAAAD,WAAA;IAAEE,aAAa,GAAAF,WAAA;EAGhC,MAAAG,WAAA,GAAwCrK,QAAQ,CAAgB,IAAI,CAAC;IAA9DsK,YAAY,GAAAD,WAAA;IAAEE,eAAe,GAAAF,WAAA;EACpC,MAAAG,WAAA,GAAkCxK,QAAQ,CAAgB,MACxD0E,mBAAmB,CAAC,SAAS,CAC/B,CAAC;IAFM+F,SAAS,GAAAD,WAAA;IAAEE,YAAY,GAAAF,WAAA;;EAI9B;EACA;EACA1K,SAAS,CAAC,MAAM;IACd,MAAM6K,SAAS,GAAGjG,mBAAmB,CAACtB,IAAI,CAAC;IAC3CgH,aAAa,CAACO,SAAS,CAAC;IACxBD,YAAY,CAACC,SAAS,CAAC;IACvBJ,eAAe,CAAC,IAAI,CAAC;EACvB,CAAC,EAAE,CAACnH,IAAI,CAAC,CAAC;EAEV,MAAMwH,QAAQ,GAAG7K,MAAM,CAAiB,IAAI,CAAC;;EAE7C;EACAD,SAAS,CAAC,MAAM;IACd,IAAI,CAACwI,IAAI,EAAE;MACT,OAAOf,SAAS;IAClB;IACAiC,UAAU,CAAC,IAAI,CAAC;IAChB,MAAMqB,KAAK,GAAGC,MAAM,CAACC,UAAU,CAAC,MAAMvB,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IAC9D,OAAO,MAAMsB,MAAM,CAACE,YAAY,CAACH,KAAK,CAAC;EACzC,CAAC,EAAE,CAACvC,IAAI,CAAC,CAAC;EAEV,MAAM2C,WAAW,GAAGpL,WAAW,CAAC,MAAM;IACpC,IAAI+K,QAAQ,CAAC3D,OAAO,EAAE;MACpBP,YAAY,CAACkE,QAAQ,CAAC3D,OAAO,CAACC,WAAW,CAAC;IAC5C;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;EACApH,SAAS,CAAC,MAAM;IACd,IAAIwI,IAAI,IAAI,CAACiB,OAAO,IAAId,IAAI,KAAK,UAAU,EAAE;MAC3CwC,WAAW,CAAC,CAAC;IACf;EACF,CAAC,EAAE,CAAC3C,IAAI,EAAEiB,OAAO,EAAEd,IAAI,EAAEwC,WAAW,CAAC,CAAC;;EAEtC;EACA,MAAMC,eAAe,GAAG9B,SAAS,IAAIX,IAAI,KAAK,UAAU,IAAItC,QAAQ,KAAK,IAAI;EAC7E,MAAMgF,aAAa,GACjB/B,SAAS,IAAIX,IAAI,KAAK,QAAQ,IAAIK,UAAU,CAACsC,IAAI,CAAC,CAAC,KAAK,EAAE;EAC5D,MAAMC,YAAY,GAAGjC,SAAS,IAAIX,IAAI,KAAK,IAAI,IAAIQ,OAAO,CAACmC,IAAI,CAAC,CAAC,KAAK,EAAE;EAExE,MAAME,YAAY,GAChB7C,IAAI,KAAK,UAAU,GACf,MAAM,GACNA,IAAI,KAAK,QAAQ,GACjB,eAAe,GACf,qBAAqB;EAE3B,MAAM8C,KAAK,GAAGA,CAAA,KAAM;IAClBlC,YAAY,CAAC,KAAK,CAAC;IACnBd,OAAO,CAAC,CAAC;EACX,CAAC;EAED,MAAMiD,YAAY,GAAGA,CAAA,KAAM;IACzB,MAAMC,KAAK,GACThD,IAAI,KAAK,UAAU,GACftC,QAAQ,KAAK,IAAI,GACjBsC,IAAI,KAAK,QAAQ,GACjBK,UAAU,CAACsC,IAAI,CAAC,CAAC,KAAK,EAAE,GACxBnC,OAAO,CAACmC,IAAI,CAAC,CAAC,KAAK,EAAE;IAC3B,IAAI,CAACK,KAAK,EAAE;MACVpC,YAAY,CAAC,IAAI,CAAC;MAClB;IACF;IACAkC,KAAK,CAAC,CAAC;EACT,CAAC;EAED,MAAMG,UAAU,GAAIC,IAAc,IAAK;IACrCjD,OAAO,CAACiD,IAAI,CAAC;IACbtC,YAAY,CAAC,KAAK,CAAC;EACrB,CAAC;EAED,MAAMuC,aAAa,IAAAxD,oBAAA,IAAAC,eAAA,GACjB/D,SAAS,CAAChB,IAAI,CAAE8D,CAAC,IAAKA,CAAC,CAAChG,EAAE,KAAK+E,QAAQ,CAAC,qBAAxCkC,eAAA,CAA0C/G,IAAI,YAAA8G,oBAAA,GAC9C,+BAA+B;;EAEjC;EACA;EACA,MAAMyD,YAAY,GAAG,CAAC,GAAGtL,oBAAoB,EAAE,GAAGyJ,UAAU,CAAC;EAC7D,MAAM8B,gBAAgB,GAAG3L,wBAAwB,CAACyD,MAAM,CACrDmI,CAAC,IAAK,CAACF,YAAY,CAACG,IAAI,CAAErG,CAAC,IAAKA,CAAC,CAACvE,EAAE,KAAK2K,CAAC,CAAC3K,EAAE,CAChD,CAAC;EAED,MAAM6K,eAAe,GAAIC,SAAqB,IAAK;IACjDjC,aAAa,CAAEkC,IAAI,IACjBA,IAAI,CAACH,IAAI,CAAED,CAAC,IAAKA,CAAC,CAAC3K,EAAE,KAAK8K,SAAS,CAAC9K,EAAE,CAAC,GAAG+K,IAAI,GAAG,CAAC,GAAGA,IAAI,EAAED,SAAS,CACtE,CAAC;IACD;IACAvC,OAAO,CAACuC,SAAS,CAAC9K,EAAE,CAAC;EACvB,CAAC;EAED,MAAMgL,qBAAqB,GAAGA,CAAA,kBAC5BxM,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IAACwL,IAAI,EAAC,OAAO;IAACvE,SAAS,EAAC;EAAU,GAAC,YAElC,CAAC,eACRlI,KAAA,CAAAyH,aAAA,CAAC7G,gBAAgB;IACf8L,YAAY,EAAET,YAAa;IAC3BU,WAAW,EAAEnM,WAAY;IACzB+F,QAAQ,EAAE/C,IAAK;IACfgD,QAAQ,EAAEuD;EAAQ,CACnB,CAAC,eACF/J,KAAA,CAAAyH,aAAA,CAACpG,QAAQ;IAAC+G,KAAK,EAAC,UAAU;IAACF,SAAS,EAAC;EAAc,GAAC,yDACK,EAAC,GAAG,eAC3DlI,KAAA,CAAAyH,aAAA;IACEmF,IAAI,EAAC,QAAQ;IACb1E,SAAS,EAAC,cAAc;IACxB2E,OAAO,EAAEA,CAAA,KAAM3C,cAAc,CAAC,IAAI;EAAE,GACrC,sBAEO,CAAC,EAAC,GAAG,EAAC,iCAEN,CACP,CACN;EAED,oBACElK,KAAA,CAAAyH,aAAA,CAAAzH,KAAA,CAAA8M,QAAA,qBACE9M,KAAA,CAAAyH,aAAA,CAAC1G,MAAM;IAAC2H,IAAI,EAAEA,IAAK;IAACC,OAAO,EAAEgD,KAAM;IAACoB,iBAAiB;EAAA,gBACnD/M,KAAA,CAAAyH,aAAA,CAAC9B,eAAe;IAACE,UAAU,EAAEgB;EAAU,CAAE,CAAC,eAC1C7G,KAAA,CAAAyH,aAAA,CAAC1G,MAAM,CAACiM,KAAK,QAAC,6BAAyC,CAAC,eACxDhN,KAAA,CAAAyH,aAAA,CAAC1G,MAAM,CAACkM,cAAc,MAAE,CAAC,eACzBjN,KAAA,CAAAyH,aAAA,CAAC1G,MAAM,CAACmM,OAAO,qBACblN,KAAA,CAAAyH,aAAA,CAACnC,cAAc,QACZqE,OAAO,gBACN3J,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAa,gBAC1BlI,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAQ,gBACrBlI,KAAA,CAAAyH,aAAA,CAACvG,cAAc;IAACgH,SAAS,EAAC;EAAW,CAAE,CACpC,CAAC,eACNlI,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAQ,gBACrBlI,KAAA,CAAAyH,aAAA,CAACvG,cAAc;IAACgH,SAAS,EAAC;EAAU,CAAE,CAAC,eACvClI,KAAA,CAAAyH,aAAA,CAACvG,cAAc;IAACgH,SAAS,EAAC;EAAY,CAAE,CACrC,CACF,CAAC,gBAENlI,KAAA,CAAAyH,aAAA,CAAAzH,KAAA,CAAA8M,QAAA,qBACE9M,KAAA,CAAAyH,aAAA,CAAC3G,QAAQ;IACPqM,QAAQ;IACR7I,OAAO,EAAE+D,YAAa;IACtB9B,QAAQ,EAAE,CAACsC,IAAI,CAAE;IACjBrC,QAAQ,EAAG4G,GAAG,IAAKtB,UAAU,CAACsB,GAAG,CAAC,CAAC,CAAa;EAAE,CACnD,CAAC,eAEFpN,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAY,GACxBW,IAAI,KAAK,UAAU,gBAClB7I,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC,UAAU;IAACR,GAAG,EAAEsD;EAAS,gBACtChL,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IACJwL,IAAI,EAAC,OAAO;IACZvE,SAAS,EAAC,UAAU;IACpBmF,OAAO,EAAE/B;EAAgB,GAC1B,wBAEM,CAAC,eACRtL,KAAA,CAAAyH,aAAA,CAACtG,MAAM;IACLmD,OAAO,EAAEhB,eAAgB;IACzBiD,QAAQ,EAAEA,QAAQ,KAAK,IAAI,GAAGoB,SAAS,GAAGpB,QAAS;IACnDC,QAAQ,EAAGoB,CAAC,IAAKoB,WAAW,CAACpB,CAAW,CAAE;IAC1ClB,WAAW,EAAC,mCAAmC;IAC/CmB,eAAe,EAAC,yBAAyB;IACzCC,YAAY,EAAEuD,WAAY;IAC1BtD,oBAAoB;IACpBC,cAAc;IACdC,MAAM,eACJjI,KAAA,CAAAyH,aAAA,CAACrG,aAAa;MACZ8G,SAAS,EAAC,YAAY;MACtBmF,OAAO,EAAE/B,eAAgB;MACzBnD,eAAe,EACb5B,QAAQ,KAAK,IAAI,GACb;QAAE6B,KAAK,EAAE;MAAW,CAAC,GACrBT;IACL,GAEAqE,aACY;EAChB,CACF,CACE,CAAC,GACJnD,IAAI,KAAK,QAAQ,gBACnB7I,KAAA,CAAAyH,aAAA,CAAAzH,KAAA,CAAA8M,QAAA,QACGN,qBAAqB,CAAC,CAAC,eACxBxM,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IACJwL,IAAI,EAAC,OAAO;IACZvE,SAAS,EAAC,UAAU;IACpBmF,OAAO,EAAE9B;EAAc,GACxB,aAEM,CAAC,eACRvL,KAAA,CAAAyH,aAAA,CAACzG,KAAK;IACJkH,SAAS,EAAC,YAAY;IACtBoF,KAAK,EAAEpE,UAAW;IAClBmE,OAAO,EAAE9B,aAAc;IACvB/E,QAAQ,EAAG+G,CAAC,IAAKpE,aAAa,CAACoE,CAAC,CAACtF,MAAM,CAACqF,KAAK;EAAE,CAChD,CACE,CAAC,eACNtN,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IAACwL,IAAI,EAAC,OAAO;IAACvE,SAAS,EAAC;EAAU,GAAC,aAElC,CAAC,eACRlI,KAAA,CAAAyH,aAAA,CAACtB,YAAY;IACX7B,OAAO,EAAEW,iBAAiB,CAACzB,IAAI,CAAE;IACjC+C,QAAQ,EAAEgE,UAAW;IACrB/D,QAAQ,EAAEgE,aAAc;IACxB9D,WAAW,EAAC;EAAoB,CACjC,CACE,CACL,CAAC,gBAEH1G,KAAA,CAAAyH,aAAA,CAAAzH,KAAA,CAAA8M,QAAA,QACGN,qBAAqB,CAAC,CAAC,eACxBxM,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IAACwL,IAAI,EAAC,OAAO;IAACvE,SAAS,EAAC;EAAU,GAAC,eAElC,CAAC,eACRlI,KAAA,CAAAyH,aAAA,CAACtB,YAAY;IACX7B,OAAO,EAAEe,mBAAmB,CAAC7B,IAAI,CAAE;IACnC+C,QAAQ,EAAEmE,YAAa;IACvBlE,QAAQ,EAAEmE,eAAgB;IAC1BjE,WAAW,EAAC;EAAsB,CACnC,CACE,CAAC,eACN1G,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IAACwL,IAAI,EAAC,OAAO;IAACvE,SAAS,EAAC;EAAU,GAAC,YAElC,CAAC,eACRlI,KAAA,CAAAyH,aAAA,CAACtB,YAAY;IACX7B,OAAO,EAAEW,iBAAiB,CAACzB,IAAI,CAAE;IACjC+C,QAAQ,EAAEsE,SAAU;IACpBrE,QAAQ,EAAEsE,YAAa;IACvBpE,WAAW,EAAC;EAAoB,CACjC,CACE,CAAC,eACN1G,KAAA,CAAAyH,aAAA;IAAKS,SAAS,EAAC;EAAU,gBACvBlI,KAAA,CAAAyH,aAAA,CAACxG,KAAK;IACJwL,IAAI,EAAC,OAAO;IACZvE,SAAS,EAAC,UAAU;IACpBmF,OAAO,EAAE5B;EAAa,GACvB,OAEM,CAAC,eACRzL,KAAA,CAAAyH,aAAA,CAACzG,KAAK;IACJkH,SAAS,EAAC,YAAY;IACtBoF,KAAK,EAAEjE,OAAQ;IACfgE,OAAO,EAAE5B,YAAa;IACtBjF,QAAQ,EAAG+G,CAAC,IAAKjE,UAAU,CAACiE,CAAC,CAACtF,MAAM,CAACqF,KAAK;EAAE,CAC7C,CACE,CACL,CAED,CACL,CAEU,CACF,CAAC,eACjBtN,KAAA,CAAAyH,aAAA,CAAC1G,MAAM,CAACkM,cAAc,MAAE,CAAC,eACzBjN,KAAA,CAAAyH,aAAA,CAAC1G,MAAM,CAACyM,OAAO,qBACbxN,KAAA,CAAAyH,aAAA,CAAC5G,MAAM;IACL4M,OAAO,EAAC,SAAS;IACjBC,KAAK,EAAE;MAAEC,WAAW,EAAE;IAAG,CAAE;IAC3BC,QAAQ,EAAEjE,OAAQ;IAClBkD,OAAO,EAAEjB;EAAa,GAErBF,YACK,CAAC,eACT1L,KAAA,CAAAyH,aAAA,CAAC5G,MAAM;IAAC4M,OAAO,EAAC,WAAW;IAACZ,OAAO,EAAElB;EAAM,GAAC,QAEpC,CACM,CACV,CAAC,eAET3L,KAAA,CAAAyH,aAAA,CAAC/G,uBAAuB;IACtBgI,IAAI,EAAEuB,WAAY;IAClBtB,OAAO,EAAEA,CAAA,KAAMuB,cAAc,CAAC,KAAK,CAAE;IACrC2D,SAAS,EAAExB,eAAgB;IAC3BK,YAAY,EAAER,gBAAiB;IAC/BS,WAAW,EAAEnM;EAAY,CAC1B,CACD,CAAC;AAEP,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkBranchOrPullRequestDialog.js","names":["React","useCallback","useEffect","useRef","useState","styled","createGlobalStyle","CONNECTABLE_REPOSITORIES","CONNECTIONS","connectionIcon","ConnectRepositoryDialog","PROJECT_REPOSITORIES","RepositorySelect","Button","ChooseV2","Dialog","Input","Label","SkeletonLoader","Select","SelectTrigger","Caption1","SANS","LINKABLES","id","kind","name","repoId","updatedMinutesAgo","author","MONTHS","pad","n","String","padStart","formatAgo","minutesAgo","now","Date","then","getTime","Math","floor","time","getHours","getMinutes","toDateString","yesterday","monthDay","getMonth","getDate","getFullYear","linkableDetail","item","GROUPED_OPTIONS","map","repo","connection","find","c","connectionId","icon","service","items","filter","l","sort","a","b","additionalInfo","options","group","length","localeCompare","ALL_ITEMS","BRANCHES","isDefault","repoBranches","repoDefaultBranchId","_repoBranches$find$id","_repoBranches$find","baseBranchOptions","branches","defaults","rest","sourceBranchOptions","StyledLinkBody","div","withConfig","displayName","componentId","MenuGlobalStyle","_ref","$menuWidth","BranchMenuGlobalStyle","p","$cls","$w","BranchSelectWrap","BranchSelect","_ref2","_options$find$name","_options$find","selected","onChange","_ref2$placeholder","placeholder","wrapRef","_useState","menuWidth","setMenuWidth","_useState2","random","toString","slice","menuCls","measure","current","offsetWidth","selectedName","o","createElement","ref","undefined","v","selectClassName","onSelectOpen","disabledInternalSort","forceCloseMenu","target","className","typographyProps","color","MODE_OPTIONS","LinkBranchOrPullRequestDialog","_ref3","_ALL_ITEMS$find$name","_ALL_ITEMS$find","open","onClose","_useState3","mode","setMode","_useState4","setSelected","_useState5","branchName","setBranchName","_useState6","prTitle","setPrTitle","_useState7","attempted","setAttempted","_useState8","loading","setLoading","_useState9","_useState0","setRepo","_useState1","connectOpen","setConnectOpen","_useState10","extraRepos","setExtraRepos","_useState11","createFrom","setCreateFrom","_useState12","sourceBranch","setSourceBranch","_useState13","mergeInto","setMergeInto","defaultId","fieldRef","timer","window","setTimeout","clearTimeout","measureMenu","existingInvalid","branchInvalid","trim","titleInvalid","primaryLabel","close","handleSubmit","valid","changeMode","next","selectedLabel","projectRepos","connectableRepos","r","some","handleConnected","connected","prev","renderRepositoryField","size","repositories","connections","type","onClick","Fragment","disableCloseOnEsc","Title","ContentDivider","Content","required","ids","invalid","value","e","Actions","variant","disabled","onConnect"],"sources":["../../../../src/presentation/shared/LinkBranchOrPullRequestDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport {\n CONNECTABLE_REPOSITORIES,\n CONNECTIONS,\n connectionIcon,\n ConnectRepositoryDialog,\n PROJECT_REPOSITORIES,\n Repository,\n RepositorySelect,\n} from \"./ConnectRepositoryDialog\";\nimport { Button } from \"../../components/Button\";\nimport { ChooseV2 } from \"../../components/ChooseV2\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Input } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Caption1 } from \"../../components/Typography\";\n\n/**\n * \"Link Branch or Pull Request\" dialog — shared by every `Presentation/Task\n * Source` story (the empty state and the populated Source Code section) so the\n * flow lives in one place.\n *\n * Three modes (ChooseV2): **Link Existing** (default), **New Branch**, **New\n * Pull Request**. The primary button is always enabled; validation runs on\n * click and outlines the offending field. Esc does not close the dialog (it\n * would lose entered data) — this is an action dialog.\n *\n * On open the body shows a ~1s skeleton, standing in for the future API loads\n * that will drive the repository / branch / PR pickers.\n *\n * The **Link Existing** picker is a grouped, multi-level select: options are\n * grouped by repository (with the connection name in parentheses), each option\n * carries a branch or pull-request icon, everything is sorted by name and\n * filterable via the search box at the top. The menu is sized to match the\n * trigger width.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/* ---- Mock data ------------------------------------------------------- */\n\ntype LinkableKind = \"branch\" | \"pr\";\n\ninterface Linkable {\n id: string;\n kind: LinkableKind;\n name: string;\n /** Repository this branch / PR belongs to (references PROJECT_REPOSITORIES). */\n repoId: string;\n /** Minutes since the last activity — drives the Ago label and the ordering. */\n updatedMinutesAgo: number;\n /** Author, shown for pull requests (\"… by Name\"). */\n author?: string;\n}\n\nconst LINKABLES: Linkable[] = [\n {\n id: \"pr-500\",\n kind: \"pr\",\n // Deliberately long, to show the name truncating with an ellipsis while the\n // right-aligned detail and radio stay visible.\n name: \"#500 Refactor rank recalculation to support multi-region contract archival and backfill\",\n repoId: \"backend\",\n updatedMinutesAgo: 8,\n author: \"Nikola M.\",\n },\n {\n id: \"branch-cache\",\n kind: \"branch\",\n name: \"spike/rank-cache\",\n repoId: \"backend\",\n updatedMinutesAgo: 30,\n },\n {\n id: \"branch-export\",\n kind: \"branch\",\n name: \"feature/retainer-export-34\",\n repoId: \"backend\",\n updatedMinutesAgo: 5 * 60,\n },\n {\n id: \"pr-119900\",\n kind: \"pr\",\n name: \"#119900 Rank API endpoints\",\n repoId: \"backend\",\n updatedMinutesAgo: 2 * 24 * 60,\n author: \"Ilija S.\",\n },\n {\n id: \"branch-fe-retainers\",\n kind: \"branch\",\n name: \"feature/retainers-ui-34\",\n repoId: \"frontend\",\n updatedMinutesAgo: 2 * 60,\n },\n {\n id: \"pr-412\",\n kind: \"pr\",\n name: \"#412 Contract list filters\",\n repoId: \"frontend\",\n updatedMinutesAgo: 24 * 60,\n author: \"Marko K.\",\n },\n {\n id: \"mr-88\",\n kind: \"pr\",\n name: \"!88 Bump worker memory\",\n repoId: \"infra\",\n updatedMinutesAgo: 3 * 24 * 60,\n author: \"Ana P.\",\n },\n {\n id: \"branch-deploy\",\n kind: \"branch\",\n name: \"chore/deploy-rank-cache\",\n repoId: \"infra\",\n updatedMinutesAgo: 24 * 60,\n },\n];\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n\n/**\n * Reproduces the format of ActiveCollab's standard `Ago` component\n * (`Angie.functions.ago()`) for the mock: \"Just now\", \"N minutes ago\",\n * \"Today HH:mm\", \"Yesterday HH:mm\", \"MMM D. HH:mm\", else \"MMM D. YYYY HH:mm\".\n * Production must use the real component.\n */\nconst formatAgo = (minutesAgo: number): string => {\n const now = new Date();\n const then = new Date(now.getTime() - minutesAgo * 60000);\n if (minutesAgo < 2) {\n return \"Just now\";\n }\n if (minutesAgo < 60) {\n return `${Math.floor(minutesAgo)} minutes ago`;\n }\n const time = `${pad(then.getHours())}:${pad(then.getMinutes())}`;\n if (then.toDateString() === now.toDateString()) {\n return `Today ${time}`;\n }\n const yesterday = new Date(now.getTime() - 24 * 60 * 60000);\n if (then.toDateString() === yesterday.toDateString()) {\n return `Yesterday ${time}`;\n }\n const monthDay = `${MONTHS[then.getMonth()]} ${then.getDate()}.`;\n if (then.getFullYear() === now.getFullYear()) {\n return `${monthDay} ${time}`;\n }\n return `${monthDay} ${then.getFullYear()} ${time}`;\n};\n\n/**\n * The detail shown on the right of an option: a branch keeps just the time of\n * its last activity; a pull request appends the author (\"… by Name\").\n */\nconst linkableDetail = (item: Linkable): string =>\n item.kind === \"pr\" && item.author\n ? `${formatAgo(item.updatedMinutesAgo)} by ${item.author}`\n : formatAgo(item.updatedMinutesAgo);\n\n/**\n * Grouped options for the Select. One group per repository, labelled\n * \"repo (Org)\" and sorted by name; inside a group, branches and PRs are\n * ordered by latest activity (freshest first). Each option carries a leading\n * provider icon (GitHub / GitLab / Git) via the Select's `icon` slot; the\n * service type is dropped from the group header since the icon now conveys it.\n */\nconst GROUPED_OPTIONS = PROJECT_REPOSITORIES.map((repo) => {\n const connection = CONNECTIONS.find((c) => c.id === repo.connectionId);\n const icon = connectionIcon(connection?.service);\n const items = LINKABLES.filter((l) => l.repoId === repo.id)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((l) => ({\n id: l.id,\n name: l.name,\n additionalInfo: linkableDetail(l),\n icon,\n }));\n return {\n id: repo.id,\n name: connection ? `${repo.name} (${connection.name})` : repo.name,\n options: items,\n };\n})\n .filter((group) => group.options.length > 0)\n .sort((a, b) => a.name.localeCompare(b.name));\n\nconst ALL_ITEMS: Linkable[] = LINKABLES;\n\n/* ---- Branch mock data (for the New Branch / New Pull Request bases) --- */\n\ninterface Branch {\n id: string;\n name: string;\n repoId: string;\n /** The repository's default branch (main / master). */\n isDefault?: boolean;\n updatedMinutesAgo: number;\n}\n\nconst BRANCHES: Branch[] = [\n // activecollab/backend\n {\n id: \"backend-main\",\n name: \"main\",\n repoId: \"backend\",\n isDefault: true,\n updatedMinutesAgo: 60,\n },\n {\n id: \"backend-cache\",\n name: \"spike/rank-cache\",\n repoId: \"backend\",\n updatedMinutesAgo: 30,\n },\n {\n id: \"backend-export\",\n name: \"feature/retainer-export-34\",\n repoId: \"backend\",\n updatedMinutesAgo: 5 * 60,\n },\n {\n id: \"backend-hotfix\",\n name: \"hotfix/rank-typo\",\n repoId: \"backend\",\n updatedMinutesAgo: 3 * 24 * 60,\n },\n // activecollab/frontend\n {\n id: \"frontend-main\",\n name: \"main\",\n repoId: \"frontend\",\n isDefault: true,\n updatedMinutesAgo: 90,\n },\n {\n id: \"frontend-retainers\",\n name: \"feature/retainers-ui-34\",\n repoId: \"frontend\",\n updatedMinutesAgo: 2 * 60,\n },\n {\n id: \"frontend-filters\",\n name: \"feature/contract-filters\",\n repoId: \"frontend\",\n updatedMinutesAgo: 24 * 60,\n },\n // activecollab/infrastructure\n {\n id: \"infra-master\",\n name: \"master\",\n repoId: \"infra\",\n isDefault: true,\n updatedMinutesAgo: 6 * 60,\n },\n {\n id: \"infra-deploy\",\n name: \"chore/deploy-rank-cache\",\n repoId: \"infra\",\n updatedMinutesAgo: 24 * 60,\n },\n];\n\nconst repoBranches = (repoId: string): Branch[] =>\n BRANCHES.filter((b) => b.repoId === repoId);\n\nconst repoDefaultBranchId = (repoId: string): string | null =>\n repoBranches(repoId).find((b) => b.isDefault)?.id ?? null;\n\ninterface BranchOption {\n id: string;\n name: string;\n additionalInfo?: string;\n}\n\n/**\n * Base-branch options (Create From / Merge Into): the default branch first with\n * no timestamp, then the rest sorted by latest activity (freshest first), each\n * with a muted \"last activity\" time.\n */\nconst baseBranchOptions = (repoId: string): BranchOption[] => {\n const branches = repoBranches(repoId);\n const defaults = branches\n .filter((b) => b.isDefault)\n .map((b) => ({ id: b.id, name: b.name }));\n const rest = branches\n .filter((b) => !b.isDefault)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((b) => ({\n id: b.id,\n name: b.name,\n additionalInfo: formatAgo(b.updatedMinutesAgo),\n }));\n return [...defaults, ...rest];\n};\n\n/**\n * Source-branch options (New Pull Request): the default branch is excluded — you\n * don't open a PR to merge the trunk into a feature branch — and the rest are\n * sorted by latest activity, each with a muted \"last activity\" time.\n */\nconst sourceBranchOptions = (repoId: string): BranchOption[] =>\n repoBranches(repoId)\n .filter((b) => !b.isDefault)\n .sort((a, b) => a.updatedMinutesAgo - b.updatedMinutesAgo)\n .map((b) => ({\n id: b.id,\n name: b.name,\n additionalInfo: formatAgo(b.updatedMinutesAgo),\n }));\n\n/* ---- Styles ---------------------------------------------------------- */\n\nconst StyledLinkBody = styled.div`\n font-family: ${SANS};\n\n .lk-tabbody {\n margin-top: 18px;\n }\n\n .lk-field {\n margin-bottom: 16px;\n }\n .lk-field:last-child {\n margin-bottom: 0;\n }\n .lk-label {\n display: block;\n margin-bottom: 6px;\n }\n /* DS Input wrapper is 360px and SelectTrigger 300px — fill the dialog. */\n .lk-control,\n .lk-control.c-input-wrapper {\n width: 100%;\n max-width: none;\n }\n\n /* Explainer + inline connect link under the repository picker. */\n .lk-repo-hint {\n display: block;\n margin-top: 8px;\n }\n .lk-repo-link {\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n color: var(--color-primary);\n cursor: pointer;\n }\n .lk-repo-link:hover {\n text-decoration: underline;\n }\n\n /* Skeleton placeholder shown for ~1s while the pickers \"load\". */\n .lk-skeleton .sk-row {\n margin-bottom: 18px;\n }\n .lk-skeleton .sk-choose {\n width: 100%;\n height: 36px;\n border-radius: 6px;\n }\n .lk-skeleton .sk-label {\n width: 160px;\n height: 12px;\n margin-bottom: 8px;\n }\n .lk-skeleton .sk-control {\n width: 100%;\n height: 40px;\n border-radius: 6px;\n }\n`;\n\n/**\n * The grouped select menu renders through a portal, so the \"match the trigger\n * width\" override has to be global, scoped to the menu's class. `$menuWidth` is\n * measured from the trigger and injected here.\n */\nconst MenuGlobalStyle = createGlobalStyle<{ $menuWidth?: number }>`\n .c-select.lk-existing-select-menu {\n ${({ $menuWidth }) =>\n $menuWidth\n ? `width: ${$menuWidth}px !important; max-width: none !important;`\n : \"\"}\n }\n\n /* Standard secondary styling for the right-aligned detail (last activity /\n author). The DS AdditionalInfo span ships unstyled and otherwise inherits\n the option name's dark weight; mute it so it reads as a secondary detail. */\n .c-select.lk-existing-select-menu .c-option--text + span {\n color: var(--color-theme-600);\n font-size: 12px;\n }\n`;\n\n/**\n * Per-instance global style for a branch select menu: matches the trigger width\n * and applies the standard muted styling to the right-aligned \"last activity\".\n */\nconst BranchMenuGlobalStyle = createGlobalStyle<{ $cls: string; $w?: number }>`\n .c-select.${(p) => p.$cls} {\n ${(p) =>\n p.$w ? `width: ${p.$w}px !important; max-width: none !important;` : \"\"}\n }\n .c-select.${(p) => p.$cls} .c-option--text + span {\n color: var(--color-theme-600);\n font-size: 12px;\n }\n`;\n\nconst BranchSelectWrap = styled.div`\n font-family: ${SANS};\n\n .branch-trigger {\n width: 100%;\n max-width: none;\n }\n`;\n\ninterface BranchSelectProps {\n options: BranchOption[];\n selected: string | null;\n onChange: (id: string) => void;\n placeholder?: string;\n}\n\n/**\n * Flat branch picker (Create From / Source Branch / Merge Into). The caller\n * supplies the option order (default-first or activity-sorted); the DS internal\n * alphabetical sort is disabled so that order is preserved.\n */\nconst BranchSelect = ({\n options,\n selected,\n onChange,\n placeholder = \"Select branch\",\n}: BranchSelectProps): ReactElement => {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n const [menuCls] = useState(\n () => `branch-select-menu-${Math.random().toString(36).slice(2)}`\n );\n\n const measure = useCallback(() => {\n if (wrapRef.current) {\n setMenuWidth(wrapRef.current.offsetWidth);\n }\n }, []);\n\n useEffect(() => {\n measure();\n }, [measure]);\n\n const selectedName =\n options.find((o) => o.id === selected)?.name ?? placeholder;\n\n return (\n <BranchSelectWrap ref={wrapRef}>\n <BranchMenuGlobalStyle $cls={menuCls} $w={menuWidth} />\n <Select\n options={options}\n selected={selected === null ? undefined : selected}\n onChange={(v) => onChange(String(v))}\n placeholder=\"Search branches\"\n selectClassName={menuCls}\n onSelectOpen={measure}\n disabledInternalSort\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"branch-trigger\"\n typographyProps={\n selected === null ? { color: \"tertiary\" } : undefined\n }\n >\n {selectedName}\n </SelectTrigger>\n }\n />\n </BranchSelectWrap>\n );\n};\n\ntype LinkMode = \"existing\" | \"branch\" | \"pr\";\n\nconst MODE_OPTIONS = [\n { id: \"existing\", name: \"Link Existing\" },\n { id: \"branch\", name: \"New Branch\" },\n { id: \"pr\", name: \"New Pull Request\" },\n];\n\nexport interface LinkBranchOrPullRequestDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nexport const LinkBranchOrPullRequestDialog = ({\n open,\n onClose,\n}: LinkBranchOrPullRequestDialogProps): ReactElement => {\n const [mode, setMode] = useState<LinkMode>(\"existing\");\n const [selected, setSelected] = useState<string | null>(null);\n const [branchName, setBranchName] = useState(\"feature/retainers-34\");\n const [prTitle, setPrTitle] = useState(\n \"#34 Retainers & Contracts functionality\"\n );\n const [attempted, setAttempted] = useState(false);\n const [loading, setLoading] = useState(true);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n\n // Repository picker (New Branch / New Pull Request) + connect-repository flow.\n const [repo, setRepo] = useState<string>(\"backend\");\n const [connectOpen, setConnectOpen] = useState(false);\n const [extraRepos, setExtraRepos] = useState<Repository[]>([]);\n\n // Branch bases. Create From / Merge Into default to the repo's default branch;\n // Source Branch starts unselected.\n const [createFrom, setCreateFrom] = useState<string | null>(() =>\n repoDefaultBranchId(\"backend\")\n );\n const [sourceBranch, setSourceBranch] = useState<string | null>(null);\n const [mergeInto, setMergeInto] = useState<string | null>(() =>\n repoDefaultBranchId(\"backend\")\n );\n\n // When the repository changes, reset the bases: default branch for\n // Create From / Merge Into, nothing for Source Branch.\n useEffect(() => {\n const defaultId = repoDefaultBranchId(repo);\n setCreateFrom(defaultId);\n setMergeInto(defaultId);\n setSourceBranch(null);\n }, [repo]);\n\n const fieldRef = useRef<HTMLDivElement>(null);\n\n // Simulate the API loads that will drive the pickers: a ~1s skeleton on open.\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n setLoading(true);\n const timer = window.setTimeout(() => setLoading(false), 1000);\n return () => window.clearTimeout(timer);\n }, [open]);\n\n const measureMenu = useCallback(() => {\n if (fieldRef.current) {\n setMenuWidth(fieldRef.current.offsetWidth);\n }\n }, []);\n\n // Keep the menu width in sync with the trigger once the form is visible.\n useEffect(() => {\n if (open && !loading && mode === \"existing\") {\n measureMenu();\n }\n }, [open, loading, mode, measureMenu]);\n\n // Submit is always enabled; validation runs on click and outlines fields.\n const existingInvalid = attempted && mode === \"existing\" && selected === null;\n const branchInvalid =\n attempted && mode === \"branch\" && branchName.trim() === \"\";\n const titleInvalid = attempted && mode === \"pr\" && prTitle.trim() === \"\";\n\n const primaryLabel =\n mode === \"existing\"\n ? \"Link\"\n : mode === \"branch\"\n ? \"Create Branch\"\n : \"Create Pull Request\";\n\n const close = () => {\n setAttempted(false);\n onClose();\n };\n\n const handleSubmit = () => {\n const valid =\n mode === \"existing\"\n ? selected !== null\n : mode === \"branch\"\n ? branchName.trim() !== \"\"\n : prTitle.trim() !== \"\";\n if (!valid) {\n setAttempted(true);\n return;\n }\n close();\n };\n\n const changeMode = (next: LinkMode) => {\n setMode(next);\n setAttempted(false);\n };\n\n const selectedLabel =\n ALL_ITEMS.find((o) => o.id === selected)?.name ??\n \"Select branch or pull request\";\n\n // Repositories already on the project (plus any just connected), and the\n // remaining ones that can still be connected from here.\n const projectRepos = [...PROJECT_REPOSITORIES, ...extraRepos];\n const connectableRepos = CONNECTABLE_REPOSITORIES.filter(\n (r) => !projectRepos.some((p) => p.id === r.id)\n );\n\n const handleConnected = (connected: Repository) => {\n setExtraRepos((prev) =>\n prev.some((r) => r.id === connected.id) ? prev : [...prev, connected]\n );\n // The repository just connected becomes the selection in the picker.\n setRepo(connected.id);\n };\n\n const renderRepositoryField = (): ReactElement => (\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Repository\n </Label>\n <RepositorySelect\n repositories={projectRepos}\n connections={CONNECTIONS}\n selected={repo}\n onChange={setRepo}\n />\n <Caption1 color=\"tertiary\" className=\"lk-repo-hint\">\n Only repositories connected to this project are listed.{\" \"}\n <button\n type=\"button\"\n className=\"lk-repo-link\"\n onClick={() => setConnectOpen(true)}\n >\n Connect a repository\n </button>{\" \"}\n if the one you need is missing.\n </Caption1>\n </div>\n );\n\n return (\n <>\n <Dialog open={open} onClose={close} disableCloseOnEsc>\n <MenuGlobalStyle $menuWidth={menuWidth} />\n <Dialog.Title>Link Branch or Pull Request</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledLinkBody>\n {loading ? (\n <div className=\"lk-skeleton\">\n <div className=\"sk-row\">\n <SkeletonLoader className=\"sk-choose\" />\n </div>\n <div className=\"sk-row\">\n <SkeletonLoader className=\"sk-label\" />\n <SkeletonLoader className=\"sk-control\" />\n </div>\n </div>\n ) : (\n <>\n <ChooseV2\n required\n options={MODE_OPTIONS}\n selected={[mode]}\n onChange={(ids) => changeMode(ids[0] as LinkMode)}\n />\n\n <div className=\"lk-tabbody\">\n {mode === \"existing\" ? (\n <div className=\"lk-field\" ref={fieldRef}>\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={existingInvalid}\n >\n Branch or Pull Request\n </Label>\n <Select\n options={GROUPED_OPTIONS}\n selected={selected === null ? undefined : selected}\n onChange={(v) => setSelected(v as string)}\n placeholder=\"Search branches and pull requests\"\n selectClassName=\"lk-existing-select-menu\"\n onSelectOpen={measureMenu}\n disabledInternalSort\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"lk-control\"\n invalid={existingInvalid}\n typographyProps={\n selected === null\n ? { color: \"tertiary\" }\n : undefined\n }\n >\n {selectedLabel}\n </SelectTrigger>\n }\n />\n </div>\n ) : mode === \"branch\" ? (\n <>\n {renderRepositoryField()}\n <div className=\"lk-field\">\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={branchInvalid}\n >\n Branch Name\n </Label>\n <Input\n className=\"lk-control\"\n value={branchName}\n invalid={branchInvalid}\n onChange={(e) => setBranchName(e.target.value)}\n />\n </div>\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Create From\n </Label>\n <BranchSelect\n options={baseBranchOptions(repo)}\n selected={createFrom}\n onChange={setCreateFrom}\n placeholder=\"Select base branch\"\n />\n </div>\n </>\n ) : (\n <>\n {renderRepositoryField()}\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Source Branch\n </Label>\n <BranchSelect\n options={sourceBranchOptions(repo)}\n selected={sourceBranch}\n onChange={setSourceBranch}\n placeholder=\"Select source branch\"\n />\n </div>\n <div className=\"lk-field\">\n <Label size=\"small\" className=\"lk-label\">\n Merge Into\n </Label>\n <BranchSelect\n options={baseBranchOptions(repo)}\n selected={mergeInto}\n onChange={setMergeInto}\n placeholder=\"Select base branch\"\n />\n </div>\n <div className=\"lk-field\">\n <Label\n size=\"small\"\n className=\"lk-label\"\n invalid={titleInvalid}\n >\n Title\n </Label>\n <Input\n className=\"lk-control\"\n value={prTitle}\n invalid={titleInvalid}\n onChange={(e) => setPrTitle(e.target.value)}\n />\n </div>\n </>\n )}\n </div>\n </>\n )}\n </StyledLinkBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" disabled={loading} onClick={handleSubmit}>\n {primaryLabel}\n </Button>\n <Button variant=\"secondary\" onClick={close}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <ConnectRepositoryDialog\n open={connectOpen}\n onClose={() => setConnectOpen(false)}\n onConnect={handleConnected}\n repositories={connectableRepos}\n connections={CONNECTIONS}\n />\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorDialogs.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/TwoFactorDialogs.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAgC,MAAM,OAAO,CAAC;AA2I1E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,oBAGhC,uBAAuB,KAAG,
|
|
1
|
+
{"version":3,"file":"TwoFactorDialogs.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/TwoFactorDialogs.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAgC,MAAM,OAAO,CAAC;AA2I1E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,oBAGhC,uBAAuB,KAAG,YA2G5B,CAAC;AAiJF,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,8BAIpC,2BAA2B,KAAG,YAkJhC,CAAC"}
|