{"version":3,"file":"link-type-schema-fields-DuTd9hiI.mjs","names":[],"sources":["../../widgets/src/lib/link-type-schema-fields.ts"],"sourcesContent":["import type { PropertyField } from \"@fluid-app/portal-core/registries\";\n\ninterface LinkTypeFieldsOptions {\n  /** Prefix for field keys (e.g. \"button\" → \"buttonLinkType\", \"buttonHref\"). Omit for bare keys. */\n  keyPrefix?: string;\n  /** Group name for the fields. */\n  group?: string;\n  /** Gate all link fields behind a boolean key (e.g. \"buttonEnabled\"). */\n  requiresKeyToBeTrue?: string;\n}\n\nfunction prefixed(prefix: string | undefined, key: string): string {\n  if (!prefix) return key;\n  return `${prefix}${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n}\n\n/**\n * Returns the standard set of link-type property schema fields:\n * linkType picker + conditional URL / Screen / Share fields.\n *\n * Matches the pattern established by LinkWidget.\n */\nexport function getLinkTypeFields(\n  options: LinkTypeFieldsOptions = {},\n): PropertyField[] {\n  const { keyPrefix, group, requiresKeyToBeTrue } = options;\n\n  const linkTypeKey = prefixed(keyPrefix, \"linkType\");\n\n  const base: Pick<PropertyField, \"group\" | \"requiresKeyToBeTrue\"> = {};\n  if (group) base.group = group;\n  if (requiresKeyToBeTrue) base.requiresKeyToBeTrue = requiresKeyToBeTrue;\n\n  // requiresKeyValue carries only the linkType condition; the boolean\n  // gate rides on requiresKeyToBeTrue separately via ...base.\n  function requiresLinkType(value: string): { key: string; value: string } {\n    return { key: linkTypeKey, value };\n  }\n\n  function requiresShareSource(\n    value: string,\n  ): Array<{ key: string; value: string }> {\n    return [\n      { key: linkTypeKey, value: \"share\" },\n      { key: prefixed(keyPrefix, \"shareSource\"), value },\n    ];\n  }\n\n  return [\n    {\n      key: linkTypeKey,\n      label: \"Link Type\",\n      type: \"buttonGroup\",\n      description:\n        \"Choose whether this link opens a URL, screen, or share action\",\n      options: [\n        { label: \"URL\", value: \"url\" },\n        { label: \"Screen\", value: \"screen\" },\n        { label: \"Share\", value: \"share\" },\n      ],\n      defaultValue: \"url\",\n      ...base,\n    },\n    {\n      key: prefixed(keyPrefix, \"href\"),\n      label: \"URL\",\n      type: \"text\",\n      description: \"The destination URL\",\n      defaultValue: \"\",\n      ...base,\n      requiresKeyValue: requiresLinkType(\"url\"),\n    },\n    {\n      key: prefixed(keyPrefix, \"openInNewTab\"),\n      label: \"Open in New Tab\",\n      type: \"boolean\",\n      description: \"Whether to open the link in a new tab\",\n      defaultValue: true,\n      ...base,\n      requiresKeyValue: requiresLinkType(\"url\"),\n    },\n    {\n      key: prefixed(keyPrefix, \"screenSlug\"),\n      label: \"Screen\",\n      type: \"screenPicker\",\n      description: \"Select a screen to navigate to\",\n      includeSystemItems: true,\n      ...base,\n      requiresKeyValue: requiresLinkType(\"screen\"),\n    },\n    {\n      key: prefixed(keyPrefix, \"shareSource\"),\n      label: \"Share Source\",\n      type: \"buttonGroup\",\n      description: \"Choose whether the share action uses a resource or URL\",\n      options: [\n        { label: \"Resource\", value: \"resource\" },\n        { label: \"URL\", value: \"url\" },\n      ],\n      defaultValue: \"resource\",\n      ...base,\n      requiresKeyValue: requiresLinkType(\"share\"),\n    },\n    {\n      key: prefixed(keyPrefix, \"shareResource\"),\n      label: \"Shareable Content\",\n      type: \"resource\",\n      description: \"Select content to share\",\n      // No EnrollmentPack: the share path cannot mint a link for one.\n      // `createShareLink` maps through SHAREABLE_TYPE_MAP, and the BFF's\n      // own `shares.ShareableType` is media | product | library | page —\n      // so an enrollment pack throws `Unknown shareable type` forever.\n      allowedTypes: [\"Product\", \"Medium\", \"Library\", \"Page\"],\n      ...base,\n      requiresKeyValue: requiresShareSource(\"resource\"),\n    },\n    {\n      key: prefixed(keyPrefix, \"shareUrl\"),\n      label: \"Share URL\",\n      type: \"text\",\n      description: \"The URL to share\",\n      defaultValue: \"\",\n      ...base,\n      requiresKeyValue: requiresShareSource(\"url\"),\n    },\n  ] satisfies PropertyField[];\n}\n"],"mappings":";AAWA,SAAS,SAAS,QAA4B,KAAqB;AACjE,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE;;;;;;;;AAS/D,SAAgB,kBACd,UAAiC,EAAE,EAClB;CACjB,MAAM,EAAE,WAAW,OAAO,wBAAwB;CAElD,MAAM,cAAc,SAAS,WAAW,WAAW;CAEnD,MAAM,OAA6D,EAAE;AACrE,KAAI,MAAO,MAAK,QAAQ;AACxB,KAAI,oBAAqB,MAAK,sBAAsB;CAIpD,SAAS,iBAAiB,OAA+C;AACvE,SAAO;GAAE,KAAK;GAAa;GAAO;;CAGpC,SAAS,oBACP,OACuC;AACvC,SAAO,CACL;GAAE,KAAK;GAAa,OAAO;GAAS,EACpC;GAAE,KAAK,SAAS,WAAW,cAAc;GAAE;GAAO,CACnD;;AAGH,QAAO;EACL;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,SAAS;IACP;KAAE,OAAO;KAAO,OAAO;KAAO;IAC9B;KAAE,OAAO;KAAU,OAAO;KAAU;IACpC;KAAE,OAAO;KAAS,OAAO;KAAS;IACnC;GACD,cAAc;GACd,GAAG;GACJ;EACD;GACE,KAAK,SAAS,WAAW,OAAO;GAChC,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,GAAG;GACH,kBAAkB,iBAAiB,MAAM;GAC1C;EACD;GACE,KAAK,SAAS,WAAW,eAAe;GACxC,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,GAAG;GACH,kBAAkB,iBAAiB,MAAM;GAC1C;EACD;GACE,KAAK,SAAS,WAAW,aAAa;GACtC,OAAO;GACP,MAAM;GACN,aAAa;GACb,oBAAoB;GACpB,GAAG;GACH,kBAAkB,iBAAiB,SAAS;GAC7C;EACD;GACE,KAAK,SAAS,WAAW,cAAc;GACvC,OAAO;GACP,MAAM;GACN,aAAa;GACb,SAAS,CACP;IAAE,OAAO;IAAY,OAAO;IAAY,EACxC;IAAE,OAAO;IAAO,OAAO;IAAO,CAC/B;GACD,cAAc;GACd,GAAG;GACH,kBAAkB,iBAAiB,QAAQ;GAC5C;EACD;GACE,KAAK,SAAS,WAAW,gBAAgB;GACzC,OAAO;GACP,MAAM;GACN,aAAa;GAKb,cAAc;IAAC;IAAW;IAAU;IAAW;IAAO;GACtD,GAAG;GACH,kBAAkB,oBAAoB,WAAW;GAClD;EACD;GACE,KAAK,SAAS,WAAW,WAAW;GACpC,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,GAAG;GACH,kBAAkB,oBAAoB,MAAM;GAC7C;EACF"}