@wildo-ai/presets-components 1.1.1 → 1.1.2
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/esm/components/actions/action-button.d.ts +1 -4
- package/dist/esm/components/actions/action-button.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.js +21 -5
- package/dist/esm/components/actions/action-button.js.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.js +7 -3
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.js +10 -2
- package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +10 -2
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.js +52 -5
- package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
- package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.js +10 -7
- package/dist/esm/components/data-display/description-list.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +3 -0
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +2 -2
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.js +8 -2
- package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +32 -15
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.js +2 -2
- package/dist/esm/components/overlays/containers/sheet.js.map +1 -1
- package/dist/esm/components/sections/accordion.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.js +43 -13
- package/dist/esm/components/sections/accordion.js.map +1 -1
- package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.js +17 -3
- package/dist/esm/components/sections/collapsible.js.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.js +11 -7
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/disclosure-nesting.d.ts +20 -0
- package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -0
- package/dist/esm/components/sections/disclosure-nesting.js +20 -0
- package/dist/esm/components/sections/disclosure-nesting.js.map +1 -0
- package/dist/esm/components/sections/tabs.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.js +141 -10
- package/dist/esm/components/sections/tabs.js.map +1 -1
- package/dist/esm/config/preset-kits.d.ts.map +1 -1
- package/dist/esm/config/preset-kits.js +0 -4
- package/dist/esm/config/preset-kits.js.map +1 -1
- package/dist/esm/config/preset-shell.d.ts.map +1 -1
- package/dist/esm/config/preset-shell.js +0 -4
- package/dist/esm/config/preset-shell.js.map +1 -1
- package/dist/esm/config/presets.d.ts.map +1 -1
- package/dist/esm/config/presets.js +0 -1
- package/dist/esm/config/presets.js.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +6 -6
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +8 -8
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +7 -7
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +7 -7
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +8 -8
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +9 -9
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.js +8 -3
- package/dist/esm/themes/cozy.theme.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +8 -5
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
- package/dist/esm/themes/editorial.theme.js +8 -3
- package/dist/esm/themes/editorial.theme.js.map +1 -1
- package/dist/esm/themes/glass.theme.d.ts.map +1 -1
- package/dist/esm/themes/glass.theme.js +10 -4
- package/dist/esm/themes/glass.theme.js.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.js +8 -3
- package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
- package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
- package/dist/esm/themes/terminal.theme.js +8 -3
- package/dist/esm/themes/terminal.theme.js.map +1 -1
- package/dist/esm/themes/trading.theme.d.ts.map +1 -1
- package/dist/esm/themes/trading.theme.js +8 -3
- package/dist/esm/themes/trading.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/dist/esm/.builder.pid +0 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-field-string.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/formatters/display-field-string.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\n/**\n * DisplayFieldString Component\n *\n * Displays a string value based on the string UI decorator.\n * Supports different display modes: text, truncate, multiline, markdown, color, link, email, badge, copy, secret\n */\n\nimport * as React from \"react\"\n\nimport { cn, useI18n, useIconRegistry, StandardIconReference, IconSize, Text, Badge } from \"@wildo-ai/saas-frontend-lib\"\nimport { FrontendComponentType } from \"@wildo-ai/presets-components-models\"\nimport { getStringUI, getStringFormat, StringDisplayMode } from \"@wildo-ai/zod-decorators\"\nimport type { DisplayFieldStringProps } from '@wildo-ai/saas-frontend-lib'\n\nimport { MarkdownContent } from \"../markdown-content\"\n\n/**\n * DisplayFieldString component\n *\n * Renders a string value according to the string UI decorator\n */\nfunction DisplayFieldString({\n schema,\n value,\n className,\n}: DisplayFieldStringProps): React.JSX.Element | null {\n const { tComponent, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_FORM_FIELD })\n const { renderIcon } = useIconRegistry()\n const [copied, setCopied] = React.useState(false)\n\n const stringUI = getStringUI(schema)\n const stringFormat = getStringFormat(schema)\n\n // SECRET fields mask by default; `initiallyRevealed` (set by `.isEphemeral()`)\n // shows the value on first paint for one-time reveals. The eye toggle still works.\n const [revealed, setRevealed] = React.useState(stringUI?.display?.initiallyRevealed ?? false)\n\n let displayMode = stringUI?.display?.displayMode ?? StringDisplayMode.TEXT\n if (!stringUI && stringFormat) {\n if (stringFormat === 'email') displayMode = StringDisplayMode.EMAIL\n else if (stringFormat === 'url') displayMode = StringDisplayMode.LINK\n }\n\n // Copy to clipboard handler\n const handleCopy = async () => {\n if (value) {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n }\n\n // Render the value content\n const renderValue = () => {\n // Handle null/undefined\n if (value === null || value === undefined || value === '') {\n return <><Text className=\"text-muted-foreground italic\" aria-hidden=\"true\">—</Text><span className=\"sr-only\">{tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD, 'noValue')}</span></>\n }\n\n // Render based on display mode\n switch (displayMode) {\n case StringDisplayMode.TEXT:\n return <Text>{value}</Text>\n\n case StringDisplayMode.TRUNCATE:\n return (\n <Text className=\"min-w-0 truncate\">\n {value}\n </Text>\n )\n\n case StringDisplayMode.MULTILINE:\n return (\n <Text className=\"whitespace-pre-wrap\">\n {value}\n </Text>\n )\n\n case StringDisplayMode.MARKDOWN:\n // Rich long-form content (descriptions, notes): full markdown body\n // themed through the typography recipes. See markdown-content.tsx for\n // the embedded heading-demotion rationale.\n return <MarkdownContent value={value} />\n\n\n case StringDisplayMode.COLOR:\n return (\n <div className=\"flex items-center gap-element\">\n <div\n className=\"h-5 w-5 rounded border border-border\"\n style={{ backgroundColor: value }}\n aria-hidden=\"true\"\n />\n <Text className=\"font-mono text-sm\">{value}</Text>\n </div>\n )\n\n case StringDisplayMode.LINK:\n return (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n >\n {value}\n </a>\n )\n\n case StringDisplayMode.EMAIL:\n return (\n <a\n href={`mailto:${value}`}\n className=\"text-primary hover:underline\"\n >\n {value}\n </a>\n )\n\n case StringDisplayMode.BADGE:\n return <Badge variant=\"secondary\">{value}</Badge>\n\n case StringDisplayMode.COPY:\n return (\n <div className=\"flex items-center gap-element\">\n <Text className=\"font-mono text-sm\">{value}</Text>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={copied ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copied') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copyToClipboard')}\n >\n <span aria-hidden=\"true\">\n {copied\n ? renderIcon(StandardIconReference.CHECK, { size: IconSize.SM })\n : renderIcon(StandardIconReference.COPY, { size: IconSize.SM })\n }\n </span>\n </button>\n </div>\n )\n\n case StringDisplayMode.SECRET:\n return (\n <div className=\"flex items-center gap-element\">\n <Text className=\"font-mono text-sm select-all\" aria-live=\"polite\">\n {revealed ? value : '••••••••••••••••'}\n </Text>\n <button\n type=\"button\"\n onClick={() => setRevealed(prev => !prev)}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={revealed ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'hideValue') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'revealValue')}\n >\n <span aria-hidden=\"true\">\n {revealed\n ? renderIcon(StandardIconReference.EYE_OFF, { size: IconSize.SM })\n : renderIcon(StandardIconReference.EYE, { size: IconSize.SM })\n }\n </span>\n </button>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={copied ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copied') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copyToClipboard')}\n >\n <span aria-hidden=\"true\">\n {copied\n ? renderIcon(StandardIconReference.CHECK, { size: IconSize.SM })\n : renderIcon(StandardIconReference.COPY, { size: IconSize.SM })\n }\n </span>\n </button>\n </div>\n )\n\n default:\n return <Text>{value}</Text>\n }\n }\n\n if (!isReady) return null\n // Label/description rendering is handled by the parent DisplayField (FIELD-01)\n return <div className={className}>{renderValue()}</div>\n}\n\n;(DisplayFieldString as typeof DisplayFieldString & { displayName: string }).displayName = \"DisplayFieldString\"\n\nexport { DisplayFieldString }\n"]}
|
|
1
|
+
{"version":3,"file":"display-field-string.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/formatters/display-field-string.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\n/**\n * DisplayFieldString Component\n *\n * Displays a string value based on the string UI decorator.\n * Supports different display modes: text, truncate, multiline, markdown, color, link, email, badge, copy, secret\n */\n\nimport * as React from \"react\"\n\nimport { cn, useI18n, useIconRegistry, StandardIconReference, IconSize, Text, Badge } from \"@wildo-ai/saas-frontend-lib\"\nimport { FrontendComponentType } from \"@wildo-ai/presets-components-models\"\nimport { getStringUI, getStringFormat, StringDisplayMode } from \"@wildo-ai/zod-decorators\"\nimport type { DisplayFieldStringProps } from '@wildo-ai/saas-frontend-lib'\n\nimport { MarkdownContent } from \"../markdown-content\"\n\n/**\n * DisplayFieldString component\n *\n * Renders a string value according to the string UI decorator\n */\nfunction DisplayFieldString({\n schema,\n value,\n className,\n}: DisplayFieldStringProps): React.JSX.Element | null {\n const { tComponent, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_FORM_FIELD })\n const { renderIcon } = useIconRegistry()\n const [copied, setCopied] = React.useState(false)\n\n const stringUI = getStringUI(schema)\n const stringFormat = getStringFormat(schema)\n\n // SECRET fields mask by default; `initiallyRevealed` (set by `.isEphemeral()`)\n // shows the value on first paint for one-time reveals. The eye toggle still works.\n const [revealed, setRevealed] = React.useState(stringUI?.display?.initiallyRevealed ?? false)\n\n let displayMode = stringUI?.display?.displayMode ?? StringDisplayMode.TEXT\n if (!stringUI && stringFormat) {\n if (stringFormat === 'email') displayMode = StringDisplayMode.EMAIL\n else if (stringFormat === 'url') displayMode = StringDisplayMode.LINK\n }\n\n // Copy to clipboard handler\n const handleCopy = async () => {\n if (value) {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n }\n\n // Render the value content\n const renderValue = () => {\n // Handle null/undefined\n if (value === null || value === undefined || value === '') {\n return <><Text className=\"text-muted-foreground italic\" aria-hidden=\"true\">—</Text><span className=\"sr-only\">{tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD, 'noValue')}</span></>\n }\n\n // Render based on display mode\n switch (displayMode) {\n case StringDisplayMode.TEXT:\n return <Text>{value}</Text>\n\n case StringDisplayMode.TRUNCATE:\n return (\n <Text className=\"min-w-0 truncate\">\n {value}\n </Text>\n )\n\n case StringDisplayMode.MULTILINE:\n return (\n <Text className=\"whitespace-pre-wrap\">\n {value}\n </Text>\n )\n\n case StringDisplayMode.IDENTIFIER:\n // A machine ref/slug: verbatim and greppable, styled to recede behind the prose.\n return <Text className=\"font-mono text-xs text-muted-foreground break-all\">{value}</Text>\n\n case StringDisplayMode.MARKDOWN:\n // Rich long-form content (descriptions, notes): full markdown body\n // themed through the typography recipes. See markdown-content.tsx for\n // the embedded heading-demotion rationale.\n return <MarkdownContent value={value} />\n\n\n case StringDisplayMode.COLOR:\n return (\n <div className=\"flex items-center gap-element\">\n <div\n className=\"h-5 w-5 rounded border border-border\"\n style={{ backgroundColor: value }}\n aria-hidden=\"true\"\n />\n <Text className=\"font-mono text-sm\">{value}</Text>\n </div>\n )\n\n case StringDisplayMode.LINK:\n return (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n >\n {value}\n </a>\n )\n\n case StringDisplayMode.EMAIL:\n return (\n <a\n href={`mailto:${value}`}\n className=\"text-primary hover:underline\"\n >\n {value}\n </a>\n )\n\n case StringDisplayMode.BADGE:\n return <Badge variant=\"secondary\">{value}</Badge>\n\n case StringDisplayMode.COPY:\n return (\n <div className=\"flex items-center gap-element\">\n <Text className=\"font-mono text-sm\">{value}</Text>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={copied ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copied') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copyToClipboard')}\n >\n <span aria-hidden=\"true\">\n {copied\n ? renderIcon(StandardIconReference.CHECK, { size: IconSize.SM })\n : renderIcon(StandardIconReference.COPY, { size: IconSize.SM })\n }\n </span>\n </button>\n </div>\n )\n\n case StringDisplayMode.SECRET:\n return (\n <div className=\"flex items-center gap-element\">\n <Text className=\"font-mono text-sm select-all\" aria-live=\"polite\">\n {revealed ? value : '••••••••••••••••'}\n </Text>\n <button\n type=\"button\"\n onClick={() => setRevealed(prev => !prev)}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={revealed ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'hideValue') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'revealValue')}\n >\n <span aria-hidden=\"true\">\n {revealed\n ? renderIcon(StandardIconReference.EYE_OFF, { size: IconSize.SM })\n : renderIcon(StandardIconReference.EYE, { size: IconSize.SM })\n }\n </span>\n </button>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n aria-label={copied ? tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copied') : tComponent(FrontendComponentType.LOW_LEVEL_FORM_FIELD_STRING, 'copyToClipboard')}\n >\n <span aria-hidden=\"true\">\n {copied\n ? renderIcon(StandardIconReference.CHECK, { size: IconSize.SM })\n : renderIcon(StandardIconReference.COPY, { size: IconSize.SM })\n }\n </span>\n </button>\n </div>\n )\n\n default:\n return <Text>{value}</Text>\n }\n }\n\n if (!isReady) return null\n // Label/description rendering is handled by the parent DisplayField (FIELD-01)\n return <div className={className}>{renderValue()}</div>\n}\n\n;(DisplayFieldString as typeof DisplayFieldString & { displayName: string }).displayName = \"DisplayFieldString\"\n\nexport { DisplayFieldString }\n"]}
|
|
@@ -25,9 +25,9 @@ export const LowLevelFormFieldLabels = [
|
|
|
25
25
|
{ ref: 'displayError', kind: LabelKind.MESSAGE, purpose: 'Fallback text when a field value cannot be rendered' },
|
|
26
26
|
{ ref: 'object', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered object/record value region' },
|
|
27
27
|
{
|
|
28
|
-
ref: '
|
|
28
|
+
ref: 'resourceLinkLimitReached',
|
|
29
29
|
kind: LabelKind.MESSAGE,
|
|
30
|
-
purpose: 'Notice shown
|
|
30
|
+
purpose: 'Notice shown where an automatic display stops expanding LINKED RECORDS, having already followed the maximum number of resource links. It never appears over a record\'s own nested fields, which are always rendered in full',
|
|
31
31
|
},
|
|
32
32
|
{ ref: 'list', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered list/array value region' },
|
|
33
33
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-primitive.labels.js","sourceRoot":"","sources":["../../../../../../src/components/form/chromes/form-primitive.labels.ts"],"names":[],"mappings":"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","sourcesContent":["import { FrontendComponentType, LabelKind, type LabellingUnitaryDef, registerComponentLabels } from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + (where\n// authored) per-key purpose / kind / variable meaning. Statically scanned by\n// the dev companion; NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelFormLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM, LowLevelFormLabels);\n\nexport const LowLevelFormControlLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_CONTROL, LowLevelFormControlLabels);\n\nexport const LowLevelFormDescriptionLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_DESCRIPTION, LowLevelFormDescriptionLabels);\n\nexport const LowLevelFormFieldLabels: LabellingUnitaryDef[] = [\n // Autosave / inline-edit save states\n { ref: 'saving', kind: LabelKind.LABEL, purpose: 'Status shown while a field value is being persisted' },\n { ref: 'saved', kind: LabelKind.LABEL, purpose: 'Confirmation shown once a field value has persisted successfully' },\n { ref: 'retry', kind: LabelKind.BUTTON, purpose: 'Button that re-attempts a failed field save' },\n { ref: 'save_failed', kind: LabelKind.MESSAGE, purpose: 'Error shown when persisting a field value fails' },\n {\n ref: 'save_conflict',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a field save is rejected because the record changed since it was loaded',\n },\n // Shared display labels (read-only value rendering)\n { ref: 'noValue', kind: LabelKind.EMPTY_STATE, purpose: 'Placeholder shown in place of a field that has no value' },\n { ref: 'clear', kind: LabelKind.ARIA, purpose: 'Accessible name of the affordance inside a clearable picker that removes the current selection, returning the control to its empty state' },\n { ref: 'displayError', kind: LabelKind.MESSAGE, purpose: 'Fallback text when a field value cannot be rendered' },\n { ref: 'object', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered object/record value region' },\n {\n ref: 'depthLimitReached',\n kind: LabelKind.MESSAGE,\n purpose: 'Notice shown when nested value rendering stops at the maximum depth',\n },\n { ref: 'list', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered list/array value region' },\n {\n ref: 'showMore',\n kind: LabelKind.BUTTON,\n purpose: 'Reveals list or object entries hidden behind a truncation cutoff',\n params: [{ key: 'count', meaning: 'number of additional entries that are currently hidden' }],\n },\n {\n ref: 'editField',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the inline-edit affordance on a displayed field',\n params: [{ key: 'label', meaning: 'display name of the field being edited' }],\n },\n { ref: 'clearSelection', kind: LabelKind.BUTTON, purpose: 'Clears the chosen value of a relationship/reference field' },\n // Select / Combobox shared labels\n {\n ref: 'selectPlaceholder',\n kind: LabelKind.PLACEHOLDER,\n purpose: 'Prompt shown in a select/combobox trigger before a choice is made',\n },\n {\n ref: 'searchPlaceholder',\n kind: LabelKind.PLACEHOLDER,\n purpose: 'Prompt shown in the filter input of a searchable select/combobox',\n },\n { ref: 'noResults', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when a select/combobox search matches no options' },\n // Multi-select labels\n {\n ref: 'selectedCount',\n kind: LabelKind.LABEL,\n purpose: 'Multi-select trigger summary counting how many options are chosen',\n params: [{ key: 'count', meaning: 'number of options currently selected' }],\n },\n { ref: 'clearAll', kind: LabelKind.BUTTON, purpose: 'Deselects every option in a multi-select' },\n { ref: 'selectAll', kind: LabelKind.BUTTON, purpose: 'Selects every available option in a multi-select' },\n // Chrome labels\n { ref: 'moreInformation', kind: LabelKind.ARIA, purpose: \"Accessible label for a field's help/info trigger\" },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_FIELD, LowLevelFormFieldLabels);\n\nexport const LowLevelFormItemLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_ITEM, LowLevelFormItemLabels);\n\nexport const LowLevelFormLabelLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_LABEL, LowLevelFormLabelLabels);\n\nexport const LowLevelFormMessageLabels: LabellingUnitaryDef[] = [\n // Error summary headings\n {\n ref: 'serverValidationTitle',\n kind: LabelKind.HEADING,\n purpose: 'Heading above validation errors returned by the server',\n },\n { ref: 'formErrorsTitle', kind: LabelKind.HEADING, purpose: 'Heading above the aggregated form-error summary' },\n {\n ref: 'moreErrors',\n kind: LabelKind.LABEL,\n purpose: 'Overflow line counting validation errors not listed in the summary',\n params: [{ key: 'count', meaning: 'number of additional errors beyond those shown' }],\n },\n // Wizard navigation\n { ref: 'wizardNext', kind: LabelKind.BUTTON, purpose: 'Advances to the next step of a multi-step form' },\n { ref: 'wizardPrevious', kind: LabelKind.BUTTON, purpose: 'Returns to the previous step of a multi-step form' },\n { ref: 'wizardSubmit', kind: LabelKind.BUTTON, purpose: 'Submits the form from the final wizard step' },\n {\n ref: 'wizardStepDefault',\n kind: LabelKind.LABEL,\n purpose: 'Fallback name for a wizard step that has no authored title',\n params: [{ key: 'index', meaning: \"the step's 1-based position in the wizard\" }],\n },\n // Section save\n { ref: 'sectionSave', kind: LabelKind.BUTTON, purpose: 'Saves the values of a single form section' },\n { ref: 'sectionSaving', kind: LabelKind.LABEL, purpose: 'Status shown while a form section is being saved' },\n // Default submit action (skeleton SubmitButton fallback when no label prop)\n { ref: 'submitSave', kind: LabelKind.BUTTON, purpose: 'Default submit-button text when the form supplies no custom label' },\n // Array field messages\n { ref: 'arrayAddItem', kind: LabelKind.BUTTON, purpose: 'Adds a new entry to a repeatable array field' },\n { ref: 'arrayItemLabel', kind: LabelKind.LABEL, purpose: 'Base name given to each entry of an array field' },\n { ref: 'arrayEmptyMessage', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when an array field has no entries yet' },\n {\n ref: 'arrayDragHandle',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the drag handle that reorders an array entry',\n params: [{ key: 'label', meaning: 'name of the array entry being dragged' }],\n },\n {\n ref: 'arrayMoveUp',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that moves an array entry earlier',\n params: [{ key: 'label', meaning: 'name of the array entry being moved' }],\n },\n {\n ref: 'arrayMoveDown',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that moves an array entry later',\n params: [{ key: 'label', meaning: 'name of the array entry being moved' }],\n },\n {\n ref: 'arrayRemoveItem',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that deletes an array entry',\n params: [{ key: 'label', meaning: 'name of the array entry being removed' }],\n },\n // Checkbox group constraint hints\n {\n ref: 'checkboxSelectExactly',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires an exact number of selections',\n params: [{ key: 'count', meaning: 'exact number of options that must be checked' }],\n },\n {\n ref: 'checkboxSelectAtLeast',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires a minimum number of selections',\n params: [{ key: 'count', meaning: 'minimum number of options that must be checked' }],\n },\n {\n ref: 'checkboxSelectUpTo',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group allows at most a given number of selections',\n params: [{ key: 'count', meaning: 'maximum number of options that may be checked' }],\n },\n {\n ref: 'checkboxSelectRange',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires a number of selections within a range',\n params: [\n { key: 'min', meaning: 'minimum number of options that must be checked' },\n { key: 'max', meaning: 'maximum number of options that may be checked' },\n ],\n },\n {\n ref: 'checkboxSelectedCount',\n kind: LabelKind.LABEL,\n purpose: 'Live count of how many options are checked in a checkbox group',\n params: [{ key: 'count', meaning: 'number of options currently checked' }],\n },\n // Record/Map field messages\n { ref: 'recordAddEntry', kind: LabelKind.BUTTON, purpose: 'Adds a new key/value pair to a record/map field' },\n { ref: 'recordKeyLabel', kind: LabelKind.LABEL, purpose: 'Label for the key input of a record/map entry' },\n { ref: 'recordValueLabel', kind: LabelKind.LABEL, purpose: 'Label for the value input of a record/map entry' },\n { ref: 'recordEmptyMessage', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when a record/map field has no entries yet' },\n {\n ref: 'recordDuplicateKey',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a record/map entry reuses an existing key',\n },\n {\n ref: 'recordEnterKeyFirst',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a record/map entry needs a key before a value can be set',\n },\n // Range field messages\n {\n ref: 'rangeFromMustBeLessThanTo',\n kind: LabelKind.MESSAGE,\n purpose: \"Error shown when a range field's start exceeds its end\",\n },\n // Uniqueness pre-validation messages\n {\n ref: 'uniqueFieldChecking',\n kind: LabelKind.MESSAGE,\n purpose: \"Status shown while a field's value is being checked for uniqueness\",\n },\n {\n ref: 'uniqueFieldConflict',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a unique field value is already taken',\n },\n {\n ref: 'uniqueFieldAvailable',\n kind: LabelKind.MESSAGE,\n purpose: 'Confirmation that a unique field value is available',\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_MESSAGE, LowLevelFormMessageLabels);\n"]}
|
|
1
|
+
{"version":3,"file":"form-primitive.labels.js","sourceRoot":"","sources":["../../../../../../src/components/form/chromes/form-primitive.labels.ts"],"names":[],"mappings":"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","sourcesContent":["import { FrontendComponentType, LabelKind, type LabellingUnitaryDef, registerComponentLabels } from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + (where\n// authored) per-key purpose / kind / variable meaning. Statically scanned by\n// the dev companion; NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelFormLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM, LowLevelFormLabels);\n\nexport const LowLevelFormControlLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_CONTROL, LowLevelFormControlLabels);\n\nexport const LowLevelFormDescriptionLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_DESCRIPTION, LowLevelFormDescriptionLabels);\n\nexport const LowLevelFormFieldLabels: LabellingUnitaryDef[] = [\n // Autosave / inline-edit save states\n { ref: 'saving', kind: LabelKind.LABEL, purpose: 'Status shown while a field value is being persisted' },\n { ref: 'saved', kind: LabelKind.LABEL, purpose: 'Confirmation shown once a field value has persisted successfully' },\n { ref: 'retry', kind: LabelKind.BUTTON, purpose: 'Button that re-attempts a failed field save' },\n { ref: 'save_failed', kind: LabelKind.MESSAGE, purpose: 'Error shown when persisting a field value fails' },\n {\n ref: 'save_conflict',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a field save is rejected because the record changed since it was loaded',\n },\n // Shared display labels (read-only value rendering)\n { ref: 'noValue', kind: LabelKind.EMPTY_STATE, purpose: 'Placeholder shown in place of a field that has no value' },\n { ref: 'clear', kind: LabelKind.ARIA, purpose: 'Accessible name of the affordance inside a clearable picker that removes the current selection, returning the control to its empty state' },\n { ref: 'displayError', kind: LabelKind.MESSAGE, purpose: 'Fallback text when a field value cannot be rendered' },\n { ref: 'object', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered object/record value region' },\n {\n ref: 'resourceLinkLimitReached',\n kind: LabelKind.MESSAGE,\n purpose: 'Notice shown where an automatic display stops expanding LINKED RECORDS, having already followed the maximum number of resource links. It never appears over a record\\'s own nested fields, which are always rendered in full',\n },\n { ref: 'list', kind: LabelKind.ARIA, purpose: 'Accessible name for a rendered list/array value region' },\n {\n ref: 'showMore',\n kind: LabelKind.BUTTON,\n purpose: 'Reveals list or object entries hidden behind a truncation cutoff',\n params: [{ key: 'count', meaning: 'number of additional entries that are currently hidden' }],\n },\n {\n ref: 'editField',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the inline-edit affordance on a displayed field',\n params: [{ key: 'label', meaning: 'display name of the field being edited' }],\n },\n { ref: 'clearSelection', kind: LabelKind.BUTTON, purpose: 'Clears the chosen value of a relationship/reference field' },\n // Select / Combobox shared labels\n {\n ref: 'selectPlaceholder',\n kind: LabelKind.PLACEHOLDER,\n purpose: 'Prompt shown in a select/combobox trigger before a choice is made',\n },\n {\n ref: 'searchPlaceholder',\n kind: LabelKind.PLACEHOLDER,\n purpose: 'Prompt shown in the filter input of a searchable select/combobox',\n },\n { ref: 'noResults', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when a select/combobox search matches no options' },\n // Multi-select labels\n {\n ref: 'selectedCount',\n kind: LabelKind.LABEL,\n purpose: 'Multi-select trigger summary counting how many options are chosen',\n params: [{ key: 'count', meaning: 'number of options currently selected' }],\n },\n { ref: 'clearAll', kind: LabelKind.BUTTON, purpose: 'Deselects every option in a multi-select' },\n { ref: 'selectAll', kind: LabelKind.BUTTON, purpose: 'Selects every available option in a multi-select' },\n // Chrome labels\n { ref: 'moreInformation', kind: LabelKind.ARIA, purpose: \"Accessible label for a field's help/info trigger\" },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_FIELD, LowLevelFormFieldLabels);\n\nexport const LowLevelFormItemLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_ITEM, LowLevelFormItemLabels);\n\nexport const LowLevelFormLabelLabels: LabellingUnitaryDef[] = [];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_LABEL, LowLevelFormLabelLabels);\n\nexport const LowLevelFormMessageLabels: LabellingUnitaryDef[] = [\n // Error summary headings\n {\n ref: 'serverValidationTitle',\n kind: LabelKind.HEADING,\n purpose: 'Heading above validation errors returned by the server',\n },\n { ref: 'formErrorsTitle', kind: LabelKind.HEADING, purpose: 'Heading above the aggregated form-error summary' },\n {\n ref: 'moreErrors',\n kind: LabelKind.LABEL,\n purpose: 'Overflow line counting validation errors not listed in the summary',\n params: [{ key: 'count', meaning: 'number of additional errors beyond those shown' }],\n },\n // Wizard navigation\n { ref: 'wizardNext', kind: LabelKind.BUTTON, purpose: 'Advances to the next step of a multi-step form' },\n { ref: 'wizardPrevious', kind: LabelKind.BUTTON, purpose: 'Returns to the previous step of a multi-step form' },\n { ref: 'wizardSubmit', kind: LabelKind.BUTTON, purpose: 'Submits the form from the final wizard step' },\n {\n ref: 'wizardStepDefault',\n kind: LabelKind.LABEL,\n purpose: 'Fallback name for a wizard step that has no authored title',\n params: [{ key: 'index', meaning: \"the step's 1-based position in the wizard\" }],\n },\n // Section save\n { ref: 'sectionSave', kind: LabelKind.BUTTON, purpose: 'Saves the values of a single form section' },\n { ref: 'sectionSaving', kind: LabelKind.LABEL, purpose: 'Status shown while a form section is being saved' },\n // Default submit action (skeleton SubmitButton fallback when no label prop)\n { ref: 'submitSave', kind: LabelKind.BUTTON, purpose: 'Default submit-button text when the form supplies no custom label' },\n // Array field messages\n { ref: 'arrayAddItem', kind: LabelKind.BUTTON, purpose: 'Adds a new entry to a repeatable array field' },\n { ref: 'arrayItemLabel', kind: LabelKind.LABEL, purpose: 'Base name given to each entry of an array field' },\n { ref: 'arrayEmptyMessage', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when an array field has no entries yet' },\n {\n ref: 'arrayDragHandle',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the drag handle that reorders an array entry',\n params: [{ key: 'label', meaning: 'name of the array entry being dragged' }],\n },\n {\n ref: 'arrayMoveUp',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that moves an array entry earlier',\n params: [{ key: 'label', meaning: 'name of the array entry being moved' }],\n },\n {\n ref: 'arrayMoveDown',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that moves an array entry later',\n params: [{ key: 'label', meaning: 'name of the array entry being moved' }],\n },\n {\n ref: 'arrayRemoveItem',\n kind: LabelKind.ARIA,\n purpose: 'Accessible label for the button that deletes an array entry',\n params: [{ key: 'label', meaning: 'name of the array entry being removed' }],\n },\n // Checkbox group constraint hints\n {\n ref: 'checkboxSelectExactly',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires an exact number of selections',\n params: [{ key: 'count', meaning: 'exact number of options that must be checked' }],\n },\n {\n ref: 'checkboxSelectAtLeast',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires a minimum number of selections',\n params: [{ key: 'count', meaning: 'minimum number of options that must be checked' }],\n },\n {\n ref: 'checkboxSelectUpTo',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group allows at most a given number of selections',\n params: [{ key: 'count', meaning: 'maximum number of options that may be checked' }],\n },\n {\n ref: 'checkboxSelectRange',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a checkbox group requires a number of selections within a range',\n params: [\n { key: 'min', meaning: 'minimum number of options that must be checked' },\n { key: 'max', meaning: 'maximum number of options that may be checked' },\n ],\n },\n {\n ref: 'checkboxSelectedCount',\n kind: LabelKind.LABEL,\n purpose: 'Live count of how many options are checked in a checkbox group',\n params: [{ key: 'count', meaning: 'number of options currently checked' }],\n },\n // Record/Map field messages\n { ref: 'recordAddEntry', kind: LabelKind.BUTTON, purpose: 'Adds a new key/value pair to a record/map field' },\n { ref: 'recordKeyLabel', kind: LabelKind.LABEL, purpose: 'Label for the key input of a record/map entry' },\n { ref: 'recordValueLabel', kind: LabelKind.LABEL, purpose: 'Label for the value input of a record/map entry' },\n { ref: 'recordEmptyMessage', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when a record/map field has no entries yet' },\n {\n ref: 'recordDuplicateKey',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a record/map entry reuses an existing key',\n },\n {\n ref: 'recordEnterKeyFirst',\n kind: LabelKind.MESSAGE,\n purpose: 'Hint that a record/map entry needs a key before a value can be set',\n },\n // Range field messages\n {\n ref: 'rangeFromMustBeLessThanTo',\n kind: LabelKind.MESSAGE,\n purpose: \"Error shown when a range field's start exceeds its end\",\n },\n // Uniqueness pre-validation messages\n {\n ref: 'uniqueFieldChecking',\n kind: LabelKind.MESSAGE,\n purpose: \"Status shown while a field's value is being checked for uniqueness\",\n },\n {\n ref: 'uniqueFieldConflict',\n kind: LabelKind.MESSAGE,\n purpose: 'Error shown when a unique field value is already taken',\n },\n {\n ref: 'uniqueFieldAvailable',\n kind: LabelKind.MESSAGE,\n purpose: 'Confirmation that a unique field value is available',\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_FORM_MESSAGE, LowLevelFormMessageLabels);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-user-org.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/menu-user-org.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAoB3C,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAErF,eAAO,MAAM,0CAA0C,EAAE,KAAK,CAAC,EAAE,CAAC,iCAAiC,
|
|
1
|
+
{"version":3,"file":"menu-user-org.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/menu-user-org.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAoB3C,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAErF,eAAO,MAAM,0CAA0C,EAAE,KAAK,CAAC,EAAE,CAAC,iCAAiC,CAwTlG,CAAC"}
|
|
@@ -40,7 +40,7 @@ export const ApplicationLevelPreset_MenuUserOrg_Default = ({ containerType, cont
|
|
|
40
40
|
/* Multiple orgs — full selectable list */
|
|
41
41
|
_jsxs("div", { className: "p-item", children: [_jsx("p", { className: "text-xs text-muted-foreground mb-item px-card-sm", children: orgsLabel }), _jsx("div", { className: "space-y-item-xs", children: organizations.map(org => {
|
|
42
42
|
const isSelected = org._id === currentOrganization?._id;
|
|
43
|
-
return (_jsxs(Button, { variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, onClick: () => handleSwitchOrg(org._id), className: cn('w-full justify-start text-sm rounded-sm', isSelected && 'bg-primary/10 text-primary hover:bg-primary/15'), children: [_jsx("span", { className: cn('flex-shrink-0', isSelected ? 'text-primary' : 'invisible'), children: checkIcon }), _jsx("span", { className: "truncate", children: org.name })] }, org._id));
|
|
43
|
+
return (_jsxs(Button, { "data-component-type": "user-org-menu-option", "data-organization-id": org._id, "data-selected": isSelected ? 'true' : 'false', variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, onClick: () => handleSwitchOrg(org._id), className: cn('w-full justify-start text-sm rounded-sm', isSelected && 'bg-primary/10 text-primary hover:bg-primary/15'), children: [_jsx("span", { className: cn('flex-shrink-0', isSelected ? 'text-primary' : 'invisible'), children: checkIcon }), _jsx("span", { className: "truncate", children: org.name })] }, org._id));
|
|
44
44
|
}) })] })) : (
|
|
45
45
|
/* Single org — non-interactive display */
|
|
46
46
|
_jsxs("div", { className: "px-card py-card-sm", children: [_jsx("p", { className: "text-xs text-muted-foreground leading-none", children: orgsLabel }), _jsx("p", { className: "text-sm font-medium leading-none mt-element truncate", children: currentOrganization?.name ?? '' })] }))] }));
|
|
@@ -96,7 +96,13 @@ export const ApplicationLevelPreset_MenuUserOrg_Default = ({ containerType, cont
|
|
|
96
96
|
* aria-hidden-on-a-focused-ancestor by construction. Outside-click and
|
|
97
97
|
* Escape dismissal still work via the DismissableLayer.
|
|
98
98
|
*/
|
|
99
|
-
_jsxs(DropdownMenu, { open: isOpen, onOpenChange: setIsOpen, modal: false, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button
|
|
99
|
+
_jsxs(DropdownMenu, { open: isOpen, onOpenChange: setIsOpen, modal: false, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button
|
|
100
|
+
/*
|
|
101
|
+
* The only i18n-INDEPENDENT handle on this menu. Its `aria-label` is a translated string,
|
|
102
|
+
* so a browser scenario keying on it would break in any locale but the default — the same
|
|
103
|
+
* discipline `quick-switcher` follows with `data-component-type`.
|
|
104
|
+
*/
|
|
105
|
+
, { "data-component-type": "user-org-menu", variant: ButtonVariants_Variant.GHOST, size: isAvatarOnly ? ButtonSize.ICON : ButtonSize.SM, className: isAvatarOnly
|
|
100
106
|
? 'rounded-full h-9 w-9'
|
|
101
107
|
: 'rounded-full pe-card-sm', "aria-label": tc('userMenuLabel'), children: renderTriggerContent() }) }), _jsxs(DropdownMenuContent, { align: popupAlignment.align, side: popupAlignment.side, className: "w-72 max-w-[calc(100vw-2rem)] p-0", children: [renderUserInfoSection(), renderOrgSection(), renderSettingsSection(), renderLogoutSection()] })] }));
|
|
102
108
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-user-org.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/menu-user-org.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback } from 'react';\nimport {\n UserDropdownSection,\n UserDropdownAvatarDisplay,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { ButtonSize, FrontendComponentType } from '@wildo-ai/presets-components-models';\n\nimport {\n DropdownMenu, DropdownMenuContent, DropdownMenuTrigger,\n Avatar, AvatarFallback, AvatarImage,\n Button, ButtonVariants_Variant,\n Separator,\n useI18n,\n useIconRegistry,\n useMenuUserOrgBehavior,\n IconSize, StandardIconReference,\n cn,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport type { ApplicationLevelProps_MenuUserOrg } from '@wildo-ai/saas-frontend-lib';\n\nexport const ApplicationLevelPreset_MenuUserOrg_Default: React.FC<ApplicationLevelProps_MenuUserOrg> = ({\n containerType,\n containerPlacement,\n}) => {\n const behavior = useMenuUserOrgBehavior(containerType, containerPlacement);\n const { tComponent, isReady } = useI18n({ component: FrontendComponentType.APPLICATION_LEVEL_USER_DROPDOWN });\n const { renderIcon } = useIconRegistry();\n\n const {\n isOpen,\n setIsOpen,\n isUserAuthenticated,\n userInitials,\n displayName,\n email,\n avatarUrl,\n currentOrganization,\n organizations,\n sections,\n avatarDisplay,\n showOrgSwitcher,\n showLogout,\n settingsTarget,\n settingsTargets,\n popupAlignment,\n handleLogout,\n handleSwitchOrg,\n handleNavigateToSettingsTarget,\n } = behavior;\n\n const tc = useCallback(\n (key: string) => tComponent(FrontendComponentType.APPLICATION_LEVEL_USER_DROPDOWN, key),\n [tComponent],\n );\n\n // ===================================================================\n // Render Helpers\n // ===================================================================\n\n const renderTriggerContent = () => {\n\n switch (avatarDisplay) {\n case UserDropdownAvatarDisplay.AVATAR_NAME:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <span className=\"text-sm font-medium max-w-[120px] truncate\">{displayName}</span>\n </div>\n );\n case UserDropdownAvatarDisplay.AVATAR_ORG:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <span className=\"text-sm font-medium max-w-[120px] truncate\">\n {currentOrganization?.name ?? displayName}\n </span>\n </div>\n );\n case UserDropdownAvatarDisplay.FULL:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col items-start\">\n <span className=\"text-sm font-medium max-w-[120px] truncate\">{displayName}</span>\n <span className=\"text-xs text-muted-foreground max-w-[120px] truncate\">\n {currentOrganization?.name}\n </span>\n </div>\n </div>\n );\n case UserDropdownAvatarDisplay.AVATAR_ONLY:\n default:\n return (\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n );\n }\n };\n\n const renderUserInfoSection = () => {\n if (!sections.includes(UserDropdownSection.USER_INFO)) return null;\n\n return (\n <div className=\"px-card py-card-sm\">\n <p className=\"text-sm font-medium leading-none truncate\">{displayName}</p>\n <p className=\"text-xs leading-none text-muted-foreground mt-item truncate\">{email}</p>\n </div>\n );\n };\n\n const renderOrgSection = () => {\n if (!sections.includes(UserDropdownSection.ORG_SWITCHER)) return null;\n\n const hasMultipleOrgs = organizations && organizations.length > 1;\n const orgsLabel = tc('organizations');\n\n const checkIcon = renderIcon(\n StandardIconReference.CHECK,\n { size: IconSize.SM }\n );\n\n return (\n <>\n <Separator />\n\n {hasMultipleOrgs && showOrgSwitcher && sections.includes(UserDropdownSection.ORG_SWITCHER) ? (\n /* Multiple orgs — full selectable list */\n <div className=\"p-item\">\n <p className=\"text-xs text-muted-foreground mb-item px-card-sm\">{orgsLabel}</p>\n <div className=\"space-y-item-xs\">\n {organizations.map(org => {\n const isSelected = org._id === currentOrganization?._id;\n return (\n <Button\n key={org._id}\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n onClick={() => handleSwitchOrg(org._id)}\n className={cn('w-full justify-start text-sm rounded-sm', isSelected && 'bg-primary/10 text-primary hover:bg-primary/15')}\n >\n <span className={cn('flex-shrink-0', isSelected ? 'text-primary' : 'invisible')}>\n {checkIcon}\n </span>\n <span className=\"truncate\">{org.name}</span>\n </Button>\n );\n })}\n </div>\n </div>\n ) : (\n /* Single org — non-interactive display */\n <div className=\"px-card py-card-sm\">\n <p className=\"text-xs text-muted-foreground leading-none\">{orgsLabel}</p>\n <p className=\"text-sm font-medium leading-none mt-element truncate\">\n {currentOrganization?.name ?? ''}\n </p>\n </div>\n )}\n </>\n );\n };\n\n const renderSettingsSection = () => {\n if (!sections.includes(UserDropdownSection.SETTINGS)) return null;\n\n const settingsLabel = tc('settings');\n const settingsIcon = renderIcon(\n StandardIconReference.SETTINGS,\n { size: IconSize.SM }\n );\n\n // Authored settings entries render inline (icon + label), one per entry,\n // instead of a single \"Settings\" button. The list IS the intent — there is\n // no separate enable flag that could disagree with it.\n if (settingsTargets.length > 0) {\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <p className=\"text-xs text-muted-foreground mb-item px-card-sm\">{settingsLabel}</p>\n <div className=\"space-y-item-xs\">\n {settingsTargets.map(item => (\n <Button\n key={item.id}\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"w-full justify-start rounded-sm\"\n onClick={() => handleNavigateToSettingsTarget(item)}\n >\n {item.icon ?? settingsIcon}\n <span className=\"truncate\">{item.label}</span>\n </Button>\n ))}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <Button\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"w-full justify-start rounded-sm\"\n disabled={!settingsTarget}\n onClick={() => settingsTarget && handleNavigateToSettingsTarget(settingsTarget)}\n >\n {settingsIcon}\n {settingsLabel}\n </Button>\n </div>\n </>\n );\n };\n\n const renderLogoutSection = () => {\n if (!sections.includes(UserDropdownSection.LOGOUT) || !showLogout) return null;\n\n const logoutLabel = tc('logout');\n const logoutIcon = renderIcon(\n StandardIconReference.LOGOUT,\n { size: IconSize.SM }\n );\n\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <Button\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n onClick={handleLogout}\n className=\"w-full justify-start rounded-sm text-destructive hover:text-destructive\"\n >\n {logoutIcon}\n {logoutLabel}\n </Button>\n </div>\n </>\n );\n };\n\n // ===================================================================\n // Early Return - Not Authenticated\n // ===================================================================\n\n if (!isUserAuthenticated) {\n return null;\n }\n\n if (!isReady) return null;\n\n // ===================================================================\n // Render\n // ===================================================================\n\n const isAvatarOnly = avatarDisplay === UserDropdownAvatarDisplay.AVATAR_ONLY\n || (!avatarDisplay);\n\n return (\n /*\n * `modal={false}` is required, not cosmetic.\n *\n * The trigger below lives INSIDE the menubar (`role=\"banner\"`), while the\n * dropdown content is portaled OUT of it. Radix's default `modal={true}`\n * runs `hideOthers(content)` on open, which sets `aria-hidden=\"true\"` on\n * every subtree outside the portaled content — including the menubar that\n * still hosts the focused trigger (the click that opened the menu focuses\n * the avatar button). The browser then blocks that aria-hidden with\n * \"descendant retained focus\", an accessibility violation.\n *\n * A transient account menu needs none of the modal guarantees (scroll\n * lock, outside-pointer blocking, background AT-hiding), so going\n * non-modal is both the correct UX and removes the invalid\n * aria-hidden-on-a-focused-ancestor by construction. Outside-click and\n * Escape dismissal still work via the DismissableLayer.\n */\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen} modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant={ButtonVariants_Variant.GHOST}\n size={isAvatarOnly ? ButtonSize.ICON : ButtonSize.SM}\n className={isAvatarOnly\n ? 'rounded-full h-9 w-9'\n : 'rounded-full pe-card-sm'\n }\n aria-label={tc('userMenuLabel')}\n >\n {renderTriggerContent()}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={popupAlignment.align}\n side={popupAlignment.side}\n className=\"w-72 max-w-[calc(100vw-2rem)] p-0\"\n >\n {renderUserInfoSection()}\n {renderOrgSection()}\n {renderSettingsSection()}\n {renderLogoutSection()}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"menu-user-org.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/menu-user-org.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback } from 'react';\nimport {\n UserDropdownSection,\n UserDropdownAvatarDisplay,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { ButtonSize, FrontendComponentType } from '@wildo-ai/presets-components-models';\n\nimport {\n DropdownMenu, DropdownMenuContent, DropdownMenuTrigger,\n Avatar, AvatarFallback, AvatarImage,\n Button, ButtonVariants_Variant,\n Separator,\n useI18n,\n useIconRegistry,\n useMenuUserOrgBehavior,\n IconSize, StandardIconReference,\n cn,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport type { ApplicationLevelProps_MenuUserOrg } from '@wildo-ai/saas-frontend-lib';\n\nexport const ApplicationLevelPreset_MenuUserOrg_Default: React.FC<ApplicationLevelProps_MenuUserOrg> = ({\n containerType,\n containerPlacement,\n}) => {\n const behavior = useMenuUserOrgBehavior(containerType, containerPlacement);\n const { tComponent, isReady } = useI18n({ component: FrontendComponentType.APPLICATION_LEVEL_USER_DROPDOWN });\n const { renderIcon } = useIconRegistry();\n\n const {\n isOpen,\n setIsOpen,\n isUserAuthenticated,\n userInitials,\n displayName,\n email,\n avatarUrl,\n currentOrganization,\n organizations,\n sections,\n avatarDisplay,\n showOrgSwitcher,\n showLogout,\n settingsTarget,\n settingsTargets,\n popupAlignment,\n handleLogout,\n handleSwitchOrg,\n handleNavigateToSettingsTarget,\n } = behavior;\n\n const tc = useCallback(\n (key: string) => tComponent(FrontendComponentType.APPLICATION_LEVEL_USER_DROPDOWN, key),\n [tComponent],\n );\n\n // ===================================================================\n // Render Helpers\n // ===================================================================\n\n const renderTriggerContent = () => {\n\n switch (avatarDisplay) {\n case UserDropdownAvatarDisplay.AVATAR_NAME:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <span className=\"text-sm font-medium max-w-[120px] truncate\">{displayName}</span>\n </div>\n );\n case UserDropdownAvatarDisplay.AVATAR_ORG:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <span className=\"text-sm font-medium max-w-[120px] truncate\">\n {currentOrganization?.name ?? displayName}\n </span>\n </div>\n );\n case UserDropdownAvatarDisplay.FULL:\n return (\n <div className=\"flex items-center gap-element\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col items-start\">\n <span className=\"text-sm font-medium max-w-[120px] truncate\">{displayName}</span>\n <span className=\"text-xs text-muted-foreground max-w-[120px] truncate\">\n {currentOrganization?.name}\n </span>\n </div>\n </div>\n );\n case UserDropdownAvatarDisplay.AVATAR_ONLY:\n default:\n return (\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={avatarUrl} alt={displayName} />\n <AvatarFallback className=\"text-xs\">{userInitials}</AvatarFallback>\n </Avatar>\n );\n }\n };\n\n const renderUserInfoSection = () => {\n if (!sections.includes(UserDropdownSection.USER_INFO)) return null;\n\n return (\n <div className=\"px-card py-card-sm\">\n <p className=\"text-sm font-medium leading-none truncate\">{displayName}</p>\n <p className=\"text-xs leading-none text-muted-foreground mt-item truncate\">{email}</p>\n </div>\n );\n };\n\n const renderOrgSection = () => {\n if (!sections.includes(UserDropdownSection.ORG_SWITCHER)) return null;\n\n const hasMultipleOrgs = organizations && organizations.length > 1;\n const orgsLabel = tc('organizations');\n\n const checkIcon = renderIcon(\n StandardIconReference.CHECK,\n { size: IconSize.SM }\n );\n\n return (\n <>\n <Separator />\n\n {hasMultipleOrgs && showOrgSwitcher && sections.includes(UserDropdownSection.ORG_SWITCHER) ? (\n /* Multiple orgs — full selectable list */\n <div className=\"p-item\">\n <p className=\"text-xs text-muted-foreground mb-item px-card-sm\">{orgsLabel}</p>\n <div className=\"space-y-item-xs\">\n {organizations.map(org => {\n const isSelected = org._id === currentOrganization?._id;\n return (\n <Button\n key={org._id}\n /*\n * The org's IDENTITY on the element, not its name: a scenario asserting which\n * organization is active must not have to match a display name it did not choose,\n * and `data-selected` states the current one without reading the check icon —\n * which is an icon, and therefore not assertable text at all.\n */\n data-component-type=\"user-org-menu-option\"\n data-organization-id={org._id}\n data-selected={isSelected ? 'true' : 'false'}\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n onClick={() => handleSwitchOrg(org._id)}\n className={cn('w-full justify-start text-sm rounded-sm', isSelected && 'bg-primary/10 text-primary hover:bg-primary/15')}\n >\n <span className={cn('flex-shrink-0', isSelected ? 'text-primary' : 'invisible')}>\n {checkIcon}\n </span>\n <span className=\"truncate\">{org.name}</span>\n </Button>\n );\n })}\n </div>\n </div>\n ) : (\n /* Single org — non-interactive display */\n <div className=\"px-card py-card-sm\">\n <p className=\"text-xs text-muted-foreground leading-none\">{orgsLabel}</p>\n <p className=\"text-sm font-medium leading-none mt-element truncate\">\n {currentOrganization?.name ?? ''}\n </p>\n </div>\n )}\n </>\n );\n };\n\n const renderSettingsSection = () => {\n if (!sections.includes(UserDropdownSection.SETTINGS)) return null;\n\n const settingsLabel = tc('settings');\n const settingsIcon = renderIcon(\n StandardIconReference.SETTINGS,\n { size: IconSize.SM }\n );\n\n // Authored settings entries render inline (icon + label), one per entry,\n // instead of a single \"Settings\" button. The list IS the intent — there is\n // no separate enable flag that could disagree with it.\n if (settingsTargets.length > 0) {\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <p className=\"text-xs text-muted-foreground mb-item px-card-sm\">{settingsLabel}</p>\n <div className=\"space-y-item-xs\">\n {settingsTargets.map(item => (\n <Button\n key={item.id}\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"w-full justify-start rounded-sm\"\n onClick={() => handleNavigateToSettingsTarget(item)}\n >\n {item.icon ?? settingsIcon}\n <span className=\"truncate\">{item.label}</span>\n </Button>\n ))}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <Button\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"w-full justify-start rounded-sm\"\n disabled={!settingsTarget}\n onClick={() => settingsTarget && handleNavigateToSettingsTarget(settingsTarget)}\n >\n {settingsIcon}\n {settingsLabel}\n </Button>\n </div>\n </>\n );\n };\n\n const renderLogoutSection = () => {\n if (!sections.includes(UserDropdownSection.LOGOUT) || !showLogout) return null;\n\n const logoutLabel = tc('logout');\n const logoutIcon = renderIcon(\n StandardIconReference.LOGOUT,\n { size: IconSize.SM }\n );\n\n return (\n <>\n <Separator />\n <div className=\"p-item\">\n <Button\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n onClick={handleLogout}\n className=\"w-full justify-start rounded-sm text-destructive hover:text-destructive\"\n >\n {logoutIcon}\n {logoutLabel}\n </Button>\n </div>\n </>\n );\n };\n\n // ===================================================================\n // Early Return - Not Authenticated\n // ===================================================================\n\n if (!isUserAuthenticated) {\n return null;\n }\n\n if (!isReady) return null;\n\n // ===================================================================\n // Render\n // ===================================================================\n\n const isAvatarOnly = avatarDisplay === UserDropdownAvatarDisplay.AVATAR_ONLY\n || (!avatarDisplay);\n\n return (\n /*\n * `modal={false}` is required, not cosmetic.\n *\n * The trigger below lives INSIDE the menubar (`role=\"banner\"`), while the\n * dropdown content is portaled OUT of it. Radix's default `modal={true}`\n * runs `hideOthers(content)` on open, which sets `aria-hidden=\"true\"` on\n * every subtree outside the portaled content — including the menubar that\n * still hosts the focused trigger (the click that opened the menu focuses\n * the avatar button). The browser then blocks that aria-hidden with\n * \"descendant retained focus\", an accessibility violation.\n *\n * A transient account menu needs none of the modal guarantees (scroll\n * lock, outside-pointer blocking, background AT-hiding), so going\n * non-modal is both the correct UX and removes the invalid\n * aria-hidden-on-a-focused-ancestor by construction. Outside-click and\n * Escape dismissal still work via the DismissableLayer.\n */\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen} modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n /*\n * The only i18n-INDEPENDENT handle on this menu. Its `aria-label` is a translated string,\n * so a browser scenario keying on it would break in any locale but the default — the same\n * discipline `quick-switcher` follows with `data-component-type`.\n */\n data-component-type=\"user-org-menu\"\n variant={ButtonVariants_Variant.GHOST}\n size={isAvatarOnly ? ButtonSize.ICON : ButtonSize.SM}\n className={isAvatarOnly\n ? 'rounded-full h-9 w-9'\n : 'rounded-full pe-card-sm'\n }\n aria-label={tc('userMenuLabel')}\n >\n {renderTriggerContent()}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={popupAlignment.align}\n side={popupAlignment.side}\n className=\"w-72 max-w-[calc(100vw-2rem)] p-0\"\n >\n {renderUserInfoSection()}\n {renderOrgSection()}\n {renderSettingsSection()}\n {renderLogoutSection()}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAOL,6BAA6B,EA6B9B,MAAM,6BAA6B,CAAC;AAerC,eAAO,MAAM,sCAAsC,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAOL,6BAA6B,EA6B9B,MAAM,6BAA6B,CAAC;AAerC,eAAO,MAAM,sCAAsC,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAw5B1F,CAAC"}
|
|
@@ -285,11 +285,31 @@ export const ApplicationLevelPreset_Sidebar_Default = ({ placement = HorizontalP
|
|
|
285
285
|
if (!sb.sidebarConfig.isCollapsible || collapseToggleHostedInBrandHeader)
|
|
286
286
|
return null;
|
|
287
287
|
return (
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
//
|
|
292
|
-
|
|
288
|
+
// Bottom-hosted collapse control.
|
|
289
|
+
//
|
|
290
|
+
// PERSISTENT while the rail is COLLAPSED, quiet-on-hover while it is expanded.
|
|
291
|
+
//
|
|
292
|
+
// The quiet contract — invisible until the pointer enters the sidebar, revealed
|
|
293
|
+
// on focus-within for keyboard users, always shown to coarse pointers that have
|
|
294
|
+
// no hover — is a deliberate reduction of chrome noise, and it holds while the
|
|
295
|
+
// sidebar is EXPANDED: the surface is full of labelled rows, so it says what it
|
|
296
|
+
// is and the toggle is a secondary affordance.
|
|
297
|
+
//
|
|
298
|
+
// It does NOT hold while the rail is COLLAPSED, and shipping it that way is what
|
|
299
|
+
// made this a defect rather than a preference. In the collapsed state the toggle
|
|
300
|
+
// is the ONLY chrome on the surface, nothing else on screen says the rail opens,
|
|
301
|
+
// and a fine-pointer user who never happens to hover the rail has no way to
|
|
302
|
+
// discover that it does. That went unnoticed for as long as every application
|
|
303
|
+
// started expanded (the brand header hosts a toggle there, on the line it
|
|
304
|
+
// already occupies); the moment `SIDEBAR.defaultCollapsed` let an application
|
|
305
|
+
// OPEN collapsed, a first-run operator met an icon rail with no visible way out
|
|
306
|
+
// of it — measured on the application-creation workbench.
|
|
307
|
+
//
|
|
308
|
+
// Hiding a control is only quiet when something else answers the question it
|
|
309
|
+
// would have answered.
|
|
310
|
+
_jsx("div", { className: cn('p-card-sm', sb.isCollapsed
|
|
311
|
+
? 'opacity-100'
|
|
312
|
+
: cn('opacity-0 transition-opacity duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-default)] motion-reduce:transition-none', 'group-hover/app-sidebar:opacity-100 group-focus-within/app-sidebar:opacity-100 pointer-coarse:opacity-100')), children: renderCollapseToggle(cn('w-full', sb.isCollapsed ? 'justify-center' : 'justify-start')) }));
|
|
293
313
|
};
|
|
294
314
|
// Container-inversion: components hosted inside the sidebar (e.g. the
|
|
295
315
|
// command-menu trigger), resolved via the registry and mounted with the
|
|
@@ -329,16 +349,13 @@ export const ApplicationLevelPreset_Sidebar_Default = ({ placement = HorizontalP
|
|
|
329
349
|
const primaryGroups = sb.groupedSections.filter(group => group.section.isPrimary);
|
|
330
350
|
const secondaryGroups = sb.groupedSections.filter(group => !group.section.isPrimary);
|
|
331
351
|
return (_jsx(_Fragment, { children: _jsxs(ScrollArea, { className: "flex-1 min-h-0", type: ScrollAreaType.AUTO, viewportClassName: "overscroll-contain", children: [renderHostedComponents(VerticalPlacement.TOP), _jsxs("nav", { "aria-label": tComponent(FrontendComponentType.APPLICATION_LEVEL_SIDEBAR, 'navigationLabel'), className: "p-card-sm space-y-item", children: [_jsxs("div", { className: "space-y-item-xs", children: [renderHomeLink(), primaryGroups.map(group => (_jsx(React.Fragment, { children: renderSectionContent(group) }, group.section.ref)))] }), sb.isNavigationLoading && !sb.hasItems && (_jsx("div", { role: "status", "aria-live": "polite", className: "px-card-sm py-card-sm text-sm text-muted-foreground", children: tComponent(FrontendComponentType.APPLICATION_LEVEL_SIDEBAR, 'loading') })), secondaryGroups
|
|
332
|
-
//
|
|
333
|
-
//
|
|
334
|
-
//
|
|
335
|
-
//
|
|
336
|
-
//
|
|
337
|
-
//
|
|
338
|
-
|
|
339
|
-
|| group.contentKind !== SidebarSectionContentKind.NAVIGATION_LIST
|
|
340
|
-
|| group.items.length > 0
|
|
341
|
-
|| group.moreMenuItems.length > 0)
|
|
352
|
+
// No emptiness filter here on purpose — `useSidebarBehavior` omits
|
|
353
|
+
// an empty navigation section from `groupedSections` in BOTH modes,
|
|
354
|
+
// so every preset inherits the policy and cannot disagree with it.
|
|
355
|
+
// This preset used to filter for the collapsed rail alone (an empty
|
|
356
|
+
// section's separator otherwise stacked against the next one into a
|
|
357
|
+
// double line) while expanded mode kept the empty header; that split
|
|
358
|
+
// is what shipped permanently-empty TOOLS / SETTINGS headings.
|
|
342
359
|
.map((group) => (_jsxs(React.Fragment, { children: [sb.isCollapsed && (_jsx("div", { role: "presentation", className: cn(dividerRecipe.base, 'h-px mx-element') })), renderSection(group)] }, group.section.ref))), !sb.isNavigationLoading && !sb.hasItems && (_jsx("div", { className: "px-card-sm py-card-sm text-sm text-muted-foreground", children: tComponent(FrontendComponentType.APPLICATION_LEVEL_SIDEBAR, 'noItems') }))] })] }) }));
|
|
343
360
|
};
|
|
344
361
|
// ── Mobile overlay drawer (responsivePolicy BURGER at/below the configured
|